Autodesk Developer Networkの工藤 暁です。昨日Revitの御質問を調査した際に、製品コマンドとSDKサンプルを組み合わせた調査を行いましたので御紹介させて頂きます。未だRevitプログラマとしては未熟者ですので、他に良い方法等あればご意見を伺えれば幸いです。
さて、御質問は大まかには「プロジェクトで使う単位」を変更するプログラムが2014で動作しなくなったというものでした。回答については、The
Building Coderに関連記事とSDKサンプルC:\Revit
2014 SDK\Samples\Unitsより以下の様な”長さ”の単位を変更する簡単な動作検証プログラムを作成する事が出来ました。
<code_begin>
public Result
Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document
doc = commandData.Application.ActiveUIDocument.Document;
try
{
Units projectUnit = doc.GetUnits();
using
(Transaction t = new
Transaction(doc))
{
t.Start("Set Units");
FormatOptions
formatoptions = new FormatOptions(UnitSymbolType.UST_MM, DisplayUnitType.DUT_MILLIMETERS);
formatoptions.UseDefault = false;
formatoptions.Accuracy =
0.01;
formatoptions.SuppressTrailingZeros = false;
formatoptions.SuppressLeadingZeros = false;
formatoptions.UsePlusPrefix
= false;
formatoptions.UseGrouping =
false;
formatoptions.SuppressSpaces
= false;
projectUnit.SetFormatOptions(UnitType.UT_Length,
formatoptions);
doc.SetUnits(projectUnit);
t.Commit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return Result.Succeeded;
}
<code_end>
しかしながら、作成時にFormatOptions()に指定するUnitSymbolTypeとDisplayUnitTypeの値に何を指定して良いか悩んでしました。というのも、SDKマニュアルにはUnitSymbolTypeの各Enum値が列記されておりますが、Descriptionが空白です。
Remarksには
Most unit symbols appear as suffixes after the formatted
number, for example "mm" for millimeters. Some currency symbols
appear as prefixes, for example "$" for dollars.
とありますが、M&E系の私には少し想像しずらかったです。
さらにSDKサンプルでは「プロジェクトで使う単位」が行う様にUnitSymbolType をDisplayUnitType に合わせてプルダウンメニューを構成してくれません。
そこでSDKサンプルをデバッグし、「プロジェクトで使う単位」コマンドにて確認したいUnitSymbolTypeとDisplayUnitType値を変更し、SDKサンプルにて「プロジェクトで使う単位」コマンドが設定した値を確認することで、UnitSymbolTypeとDisplayUnitTypeの値を確認しました。
私自身の為にも、UnitSymbolTypeの各Enum値のDescriptionを埋めるのが一番良いかもしれません。

Leave a Reply