<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>3DCG LABO &#187; Tips</title>
	<atom:link href="http://3d.eclo.jp/blog/category/3dcg/maya/tips/feed" rel="self" type="application/rss+xml" />
	<link>http://3d.eclo.jp/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 10 Mar 2010 08:18:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>配列プラグのサイズ確保と値設定</title>
		<link>http://3d.eclo.jp/blog/2009/12/%e9%85%8d%e5%88%97%e3%83%97%e3%83%a9%e3%82%b0%e3%81%ae%e3%82%b5%e3%82%a4%e3%82%ba%e7%a2%ba%e4%bf%9d%e3%81%a8%e5%80%a4%e8%a8%ad%e5%ae%9a.html</link>
		<comments>http://3d.eclo.jp/blog/2009/12/%e9%85%8d%e5%88%97%e3%83%97%e3%83%a9%e3%82%b0%e3%81%ae%e3%82%b5%e3%82%a4%e3%82%ba%e7%a2%ba%e4%bf%9d%e3%81%a8%e5%80%a4%e8%a8%ad%e5%ae%9a.html#comments</comments>
		<pubDate>Sun, 27 Dec 2009 01:42:25 +0000</pubDate>
		<dc:creator>tad</dc:creator>
				<category><![CDATA[Maya]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://3d.eclo.jp/blog/?p=3518</guid>
		<description><![CDATA[カスタムノードに配列アトリビュートを設定すると、
ついやってしまい勝ちなミスが配列外の参照です。
配列アトリビュートが多数あると、コネクトが正確に行われていない状態で
AEパネルを開くとMayaごと強制終了してしまいます。
その回避さくとして、あらかじめ配列プラグのサイズと値の初期設定を行っておきます。
MArrayDataBuilderを使ったコード例

//ArrayPlug
MArrayDataHandle rotHnd = data.inputArrayValue( rotate, &#038;returnStatus );
MArrayDataHandle flagHnd = data.inputArrayValue( flag, &#038;returnStatus );

if( returnStatus != MS::kSuccess )
	MGlobal::displayError( "Node cannot get value\n" );
else
{
	//PlugからNodeObject取得
	MObject myNodeObj = plug.node( &#038;returnStatus );

	//NodeObjectからDepNodeファンクション取得
	MFnDependencyNode depFn( myNodeObj );

	//rotateプラグの要素数取得
	const unsigned int nElems = rotHnd.elementCount();

	for( unsigned int i=0; i＜nElems; i++ ){

		returnStatus = rotHnd.jumpToElement( i );
		if( returnStatus != MS::kSuccess )
			MGlobal::displayError( "Node cannot get value\n" );

		returnStatus = [...]]]></description>
			<content:encoded><![CDATA[<p>カスタムノードに配列アトリビュートを設定すると、<br />
ついやってしまい勝ちなミスが配列外の参照です。<br />
配列アトリビュートが多数あると、コネクトが正確に行われていない状態で<br />
AEパネルを開くとMayaごと強制終了してしまいます。<br />
その回避さくとして、あらかじめ配列プラグのサイズと値の初期設定を行っておきます。</p>
<p>MArrayDataBuilderを使ったコード例</p>
<pre>
//ArrayPlug
MArrayDataHandle rotHnd = data.inputArrayValue( rotate, &#038;returnStatus );
MArrayDataHandle flagHnd = data.inputArrayValue( flag, &#038;returnStatus );

if( returnStatus != MS::kSuccess )
	MGlobal::displayError( "Node cannot get value\n" );
else
{
	//PlugからNodeObject取得
	MObject myNodeObj = plug.node( &#038;returnStatus );

	//NodeObjectからDepNodeファンクション取得
	MFnDependencyNode depFn( myNodeObj );

	//rotateプラグの要素数取得
	const unsigned int nElems = rotHnd.elementCount();

	for( unsigned int i=0; i＜nElems; i++ ){

		returnStatus = rotHnd.jumpToElement( i );
		if( returnStatus != MS::kSuccess )
			MGlobal::displayError( "Node cannot get value\n" );

		returnStatus = flagHnd.jumpToElement( i );
		if( returnStatus != MS::kSuccess ) {
			//flagプラグにコネクトがなくプラグが確保されていない場合
			//ここで要素数を確保する
			MObject flagAttr = depFn.attribute( "flag" );
			MArrayDataBuilder builder( flagAttr, nElems );
			MDataHandle flagHandle = builder.addElement( i );
			flagHandle.set( (int)0 );
			flagHnd.set(builder);

			flagHnd.jumpToElement( i );
		}

		・
		・
		・
	}
}
</pre>
<p>この他にももっとスマートな方法はあるかと思いますが、とりあえずのメモ替わりに。<br />
配列プラグの要素確保にはMArrayDataBuilderを使うのがミソのようです。<br />
ハンドルに値をセットするには明示的にキャストしないと入りません。<br />
配列プラグを安定して使えるようにするには結構手間がかかりますねぇ。</p>
]]></content:encoded>
			<wfw:commentRss>http://3d.eclo.jp/blog/2009/12/%e9%85%8d%e5%88%97%e3%83%97%e3%83%a9%e3%82%b0%e3%81%ae%e3%82%b5%e3%82%a4%e3%82%ba%e7%a2%ba%e4%bf%9d%e3%81%a8%e5%80%a4%e8%a8%ad%e5%ae%9a.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MayaPluginWizard for X64</title>
		<link>http://3d.eclo.jp/blog/2009/10/mayapluginwizard-for-x64.html</link>
		<comments>http://3d.eclo.jp/blog/2009/10/mayapluginwizard-for-x64.html#comments</comments>
		<pubDate>Fri, 02 Oct 2009 09:59:59 +0000</pubDate>
		<dc:creator>tad</dc:creator>
				<category><![CDATA[Maya]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://3d.eclo.jp/blog/?p=3392</guid>
		<description><![CDATA[Windows Vista 64bit で
MayaPluginWizard　を64bit環境にインストールする方法です。
対象環境はVC++2008SEです。
最初に.vszを編集しておくことが肝です。
Program Files内のディレクトリはセキュリティがきつくかかっているらしく、
ディレクトリ内での編集は反映されません。
また、さらに一見反映されているように見えるので、
何が悪いのかもわかりにくくなっています。
※メモ帳を使うと編集できるようです。
MayaPluginWizard.vszを以下のように修正します。
 VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.9.0
Param=&#8221;WIZARD_NAME = MayaPluginWizard&#8221;
Param=&#8221;RELATIVE_PATH = VCWizards&#8221;
Param=&#8221;FALLBACK_LCID = 1033&#8243;
後は、マニュアルの指示通りでOKです。
]]></description>
			<content:encoded><![CDATA[<p>Windows Vista 64bit で<br />
MayaPluginWizard　を64bit環境にインストールする方法です。<br />
対象環境はVC++2008SEです。</p>
<p>最初に.vszを編集しておくことが肝です。<br />
Program Files内のディレクトリはセキュリティがきつくかかっているらしく、<br />
ディレクトリ内での編集は反映されません。<br />
また、さらに一見反映されているように見えるので、<br />
何が悪いのかもわかりにくくなっています。<br />
※メモ帳を使うと編集できるようです。</p>
<p>MayaPluginWizard.vszを以下のように修正します。</p>
<p> VSWIZARD 7.0<br />
Wizard=VsWizard.VsWizardEngine.<span style="color: #ff0000;">9</span>.0</p>
<p>Param=&#8221;WIZARD_NAME = MayaPluginWizard&#8221;<br />
Param=&#8221;RELATIVE_PATH = <span style="color: #ff0000;">VCWizards</span>&#8221;<br />
Param=&#8221;FALLBACK_LCID = 1033&#8243;</p>
<p>後は、マニュアルの指示通りでOKです。</p>
]]></content:encoded>
			<wfw:commentRss>http://3d.eclo.jp/blog/2009/10/mayapluginwizard-for-x64.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
