Home > 3D-CAD > Fusion 360 > ドキュメント > API

ベクトルドロー・レベルゼロ

Fusionの単位を理解する

広告

新規作成日 2017-05-03
最終更新日

公式ドキュメントの和訳です。

原文:「Understanding Units in Fusion

Fusionが、どのように単位を使用するか理解することは、APIをうまく使用する上で、極めて重要です。 APIを使用するとき、Fusionで使用される単位は、常に、一貫しています。値の取得と設定では、常にそのカテゴリの単位の内部の単位の種類が使用されます。これらの単位型は、Fusionが、内部で使用し、そして、データを、どのように、ファイル保存する同じ単位のため、データベース単位として知られています。これらの単位は、以下の通りです:

  • 長さ-センチメートル
  • 角度-ラジアン
  • 質量-キログラム

内部の単位は、常に、例外なく、これらの種類を使用します。例えば、あなたが、スケッチの中で、エンティティの長さを取得するために、SketchCurve.lengthプロパティを呼び出す場合、返される値は、常にセンチメートルです。あなたが、2つのベクトルの間の角度を評価するVector3D.angleToメソッドを使用する場合、結果として得られる角度は、常にラジアンで返されます。(そのπラジアンは、180°に等しいことを覚えておいてください)。他の単位で動作するといいかもしれないため、最初は、これは、理想的に思えないかもしれません。しかしながら、これは、あなたが、常に、一貫した単位を、数えることができるため、実際には、ほとんどのことが、より簡単になります。そして、現在、ユーザーが変更できる有効になっている単位について気する必要ありません。あなたは、あなたのプログラムを上記の単位で作業するように記述するだけです。そして、アクティブ単位に関係なく、それは常に期待通りに動作します。あなたが、単位変換について気にする必要があるのは、あなたが、値を入力したり、値を表示させたりすることによって、ユーザーと対話する必要がある時だけです。

ユーザーと情報をやりとりするときの単位

Units when Communicating with the User

ユーザーと対話するとき、単位は、もう少し複雑になります。これは、いくつかの理由のためです。まず、ユーザーは、以下に示すように、既定として、いくつかの長さ単位の1つを選択をすることができます。これは、また、既定の質量単位を設定する副作用を持っています。例えば、あなたが、インチを選択をする場合、質量単位はポンドです。しかし、あなたが、センチメートルを選択をする場合、それは、グラムです。ユーザーのための角度は、常に度です。

既定の質量単位を設定

ユーザーと作業する2つ目の理由は、ユーザーが、値を入力するとき、結果は文字列で、入力したものが有効か確認するために、評価する必要があり、そして、その次に、実際の値として判断されるため更に困難です。3つ目の理由は、それらが入力するものが、必ずしも単純な値である必要がないということです。ここに、有効な入力の3つの例が、あります。穴の深さを指定するとき:

「3」-この場合、結果は、ユーザーが、何を有効な単位に選択をしたかに依存します。例えば、彼らが、インチを選択した場合、これは、3インチと解釈されます。そして、彼らが、ミリメートルを選択した場合、これは、3ミリメートルと解釈されます。

  • 「3 in」-この場合、これは、有効な単位が何であるかに関係なく、常に3インチと解釈されます。
  • 「3/2」-これは、有効な単位の3単位を2で割った結果が生じます。
  • 「hole_depth」-これは、既存のパラメータを参照します。もちろん!また、それらは、方程式の一部として、これを使用することができます。すなわち「hole_depth / 2」。

なぜなら、ユーザーは、値を指定する方法で、多くの柔軟性を持っています。そして、また、それらは、有効な単位を変更することができるため、それは、ユーザーによって入力された文字列を正しく解釈するために、コードに記述するのが困難です。これを支援するために、APIは、いくつかのユーティリティをサポートしています。内部の単位に、ユーザー文字列を変換します。これは、あなたが、上の例で文字列を取り出し、データベース単位(センチメートル)で、それらを距離の値に変換することができます。

また、これは、Fusionが、内部的に、どのように動作するかも示しています。ユーザーが、文字列の何らかのデータを入力するたびに、そして、それが、有効で、そして、何らかの実際の値の場合、Fusionは、文字列を解析し、理解する必要があります。それは、文字列を、データベース単位で、現実の値に変換します。そして、それをFusion内のすべての操作に、使用します。値をユーザーに表示する必要がある場合は、文字列が、作成されます。それは、現在の有効な単位と他の単位設定に基づいて、ユーザーに表示されます。

UnitsManagerオブジェクトを使用する

Using the UnitsManager Object

UnitsManagerオブジェクトは、単位で作業することが簡単になる関数をサポートしています。次のコードは、入力ボックスを使用して、ユーザーに、長さを入力することを促します。入力ボックスは、文字列が、何を表しているのか予想する必要なく、ユーザーが、何らかの文字列を入力できます。続いて、コードは、入力が、有効な長さの式か検証します。そして、その次に、センチメートルで、評価された結果を表示します。

// 文字列と有効であるために、ユーザーにそれが有効であると促します。
var isValid = false;
var input = '1 in';  //最初の既定の値
var realValue;
while (!isValid) {
    // ユーザーから、文字列を取得する
    var objIsCancelled = [];
    input = ui.inputBox('Enter a distance', objIsCancelled, 'Distance', input);
            
    // ダイアログが、キャンセルされる場合、プログラムを終了する
    if (objIsCancelled.value) {
        adsk.terminate();    
        return;
    }
            
    // 有効な長さが入力されていることを確認します。
    var unitsMgr = design.unitsManager;
    try {
        realValue = unitsMgr.evaluateExpression(input, unitsMgr.defaultLengthUnits);
        isValid = true;
    }
    catch (e) {
        //式が無効で、それで、エラーが表示されます。そして、再び値を入力できる、フラグを設定します。
        ui.messageBox('"' + input + '" is not a valid length expression.', 'Invalid entry', 
                      adsk.core.MessageBoxButtonTypes.OKButtonType, 
                      adsk.core.MessageBoxIconTypes.CriticalIconType);
        isValid = false;
    }
}
        
// 何かのために、値を使用します。
ui.messageBox('input: ' + input + ', result: ' + realValue);

あなたが、Fusionから、値を取得する、あるいは、あなた自身で、それを計算するとき、そして、それをユーザーに表示する必要があります。あなたは、値をフォーマットするために、UnitsManagerオブジェクトを使用することができます。それで、それは、正しい単位です。そして、現在のユーザー環境設定に基づいて、正しい小数点の桁数を持っています。

//現在の有効な単位を使用して、結果を表示します。
var unitsMgr = design.unitsManager;
var displayLength = unitsMgr.formatInternalValue(length, unitsMgr.defaultLength, true);        
ui.messageBox('The length of all edges in the selected body is: ' + displayLength);

長さは、データベース単位(センチメートル)であることが、常に期待され、渡されます。そして、formatInternalValueメソッドは、指定された単位に、それをフォーマットします。最も一般的なことは、このサンプルが、行っている既定の長さを使用することです。あなたが、既定の長さの他に、他の単位型を指定する必要がある場合、あなたは、名前で指定することができます。

ほとんどの関数が、あなたが、単位を指定する必要がある、引数を持つUnitsManagerオブジェクトが利用できます。パラメータのために、単位を指定するとき、単位は、文字列を使用して指定され、そして、あなたが、使用する同じ文字列を使用します。それにもかかわらず、UnitManagerは、どのように、単位を組み合わせるか、更に柔軟性があります。例えば、Fusionでは、"m/s/s"や"m/s^2"のような、既存の知られている単位型の組合せを使用して、加速のためのパラメーターを作成することはできません。しかしながら、これらは、有効な単位の記述です。UnitsManagerの中で使用されるとき、下記のサンプルは、メートルと秒を使用して、単位を定義します。それで、返される結果は「0.20 m / s ^ 2」です。

var result = unitsMgr.formatInternalValue(20, 'm/s/s', true);

最後の引数は、単位指定子が、結果に添付される場合、あるいは、それが、単に値である場合、示しています。これは、下記に示されるダイアログが、表示されます。

下記に示されるダイアログ

パラメータとその動作

Working with Parameters

単位について説明するとき、パラメータに関して、それらの使用法を理解することは重要です。;両方とも既存のパラメータを編集し、そして、パラメータに依存する新しいオブジェクトを作成するとき、例えば、あなたが、定義された深さの押し出しを作成するとき、押し出しの深さを制御する自動的に作成されるパラメータがあります。ユーザー・インターフェイスでは、あなたは、作成されるパラメータの式として使用される本当に文字列で、Extrudeダイアログで深さを入力します。APIを使用して押し出しを作成するとき、深さを指定する際に、もう少しの柔軟性があります。あなたは、ユーザー・インターフェイスを模倣することができます。そして、有効な長さを定義する文字列を提供しますが、また、APIは、常にデータベース単位の実際の値を指定することをサポートしています。(この場合は長さなのでセンチメートル)。深さのために、文字列式や実際の値のいずれかを指定できるようにするには、Fusionは、あなたが、パラメータになる値を提供している時はいつでも、使用される、ValueInputと呼ばれるオブジェクトをサポートします。ValueInputオブジェクトは、実際の値や文字列が含まれている、比較的簡単なオブジェクトです。ValueInputオブジェクトを作成するとき、あなたは、ValueInput.createByRealやValueInput.createByStringメソッドを使用することができます。あなたが、文字列を使用しているValueInputを作成する場合、続いて、先に述べたように、ValueInputは、ユーザーによって、入力される他の文字列と同じように評価されます。あなたが、実際の値を使用して、ValueInputを作成する場合、続いて、値は、どんな単位が必要かどうか、データベース単位が想定されています。例えば、押し出しの場合、値は、押し出し深さが長さであるので、センチメートルであると想定されます。あなたは、あなたが、持っているデータに従って、利用可能な選択肢を使用することができます。あなたが、ユーザーによって、あるいは、方程式を定義したい、いくつかの理由のため、提供される文字列を持っている場合、あなたは、createByStringを使用することができます。あなたが、値を計算した場合、続いて、あなたは、createByRealを使用することができます。下記のコードは、これを示しています。プロファイルと部品の深さは、すでに取得されています。

//押し出しのために、必要な入力を定義できるために、押し出し入力を作成します。
var extrudes = rootComp.features.extrudeFeatures;
var extInput = extrudes.createInput(prof, adsk.fusion.FeatureOperations.NewComponentFeatureOperation);
	
//距離の長さが、部品の深さの半分である長さを定義します。
var distance = adsk.core.ValueInput.createByReal(partDepth / 2);
extInput.setDistanceExtent(false, distance);
		
//押し出しを作成します。
var ext = extrudes.add(extInput); 

ValueInputオブジェクトは、一つの引数を通して、文字列または現実の値のどちらかを渡す方法として、役に立ちます。あなたが、文字列を渡す場合、その文字列は、作成されたパラメータの方程式として使用されます。それは、それが、他のパラメータ、関数などに参照を含めることができることを示しています。あなたが、実際の値を渡す場合、方程式は、Fusionで計算されて、パラメータ・ダイアログに表示されます。

APIを使用して、パラメータの値を変更するとき、あなたは、expressionプロパティを使用する利用可能な選択肢を持っています。これは、文字列で、そして、パラメータの値を変更するために、ユーザーが使用するParametersダイアログと同じです。expressionプロパティを使用して、あなたは、何らかの有効なパラメータ式を入力することができます。内部的に、Fusionは、この文字列を受け取り、それが有効であることを確認するために、それを評価します。式を設定することに加えて、APIは、同様に、valueInputプロパティを通じて実際の値を使用してパラメータを設定することをサポートします。実際の値は、単位型が、パラメータで関連付けられる、そして、直接、それをパラメータに割り当てるために、データベース単位が想定されます。これは、既存の式を上書きするでしょう。そして、Fusionは、ダイアログで表示する同等の式を作成するでしょう。「Value」列で表示される値は、上述のformatInternalValueメソッドと類似している何かを使用して、実際に、文字列に変換される現実の内部の値です。これは、環境設定で指定された小数点の数で、現在のドキュメントの省略時の単位で表示されます。それは、APIを介してのみ、内部値の読み取りと書き込みに直接アクセスできます。

パラメーターダイアログ

Home 3D-CAD 2D-CAD 3D-モデラー 学生版 モデリング資料

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」