1

私は Javascript で書かれた OpenJScad を使って 3D モデルを構築する初心者プログラマーです。

ユーザー入力パラメーターで動的に作成されるオブジェクトのインスタンス プロパティにアクセスできるように、コードを構造化する方法を見つけようとしています。次の変数を持つ親 Gear クラスがあります...

// Gear parent class
Gear = function(numTeeth, circularPitch, pressureAngle, clearance, thickness)
{    
var pitchRadius = numTeeth * circularPitch / (2 * Math.PI);

ユーザーパラメーターを受け入れるいくつかの Gear サブクラスを作成しています。つまり...

// Spur Gear
function makeSpur(params)
{
    var gear = new Gear(
    params.spurTeeth,
    params.circularPitch,
    params.pressureAngle,
    params.clearance,
    params.inputBore
);

if(params.inputBore > 0)
{
    var inputBore = CSG.cylinder({start: [0,0,-params.thickness2], end:
        [0,0,params.thickness2], radius: params.inputBore, resolution: 16});
    gear = gear.subtract(inputBore).rotateX(90);
}
return gear;

...そして、別の Gear オブジェクトの pitchRadius プロパティに基づいて位置座標を動的に生成します...

// function main
var spurGear = makeSpur(params);
spurGear = spurGear.translate([-pinionGear.pitchRadius,0,0]);

別の Gear インスタンスから pitchRadius プロパティにアクセスしようとする場合を除いて、すべてがレンダリングされます。プロトタイプとプライベート/パブリック プロパティへのアクセスについて読んだことがありますが、関数 main でインスタンス プロパティにアクセスできるようにコードを構造化する方法がわかりません。

4

2 に答える 2

0

実際にコンストラクターで CSG オブジェクトを返していることに気付きました。OpenJSCAD ユーザー ガイドに記載されているプロパティ コンテナーを使用してみてください。ガイド プロパティ変数によると、オブジェクトのメタデータを格納するためのものです。

これはガイドの例です:

var cube = CSG.cube({radius: 1.0});
cube.properties.aCorner = new CSG.Vector3D([1, 1, 1]);

追加コメント:

  1. コンストラクターでこれとは異なるオブジェクトを返しています
  2. 次のようなことをする場合: gear = gear.rotateX(90); 次に、新しいオブジェクトがあります
  3. プロパティを使用する場合は、変換時にメタデータが複製されます。
于 2015-06-30T07:26:15.473 に答える