18

独自のASCIIDXFファイルパーサーを作成しましたが、特定のドキュメントで省略記号の問題が発生しました。

開始パラメータと終了パラメータの角度方向(時計回りまたは反時計回り)を定義する「グループコード」がないようです。ほとんどの場合、反時計回りですが、すべての場合ではありません...

簡単にするために、ここに視覚的な例があります:

Ellipse1 Ellipse2

ご覧のとおり、最初の開始角度は135度、2番目の開始角度は45度です...しかし、楕円は同じように見えます(左側の半円)...これは最初の角度は時計回りで、2番目の角度は反時計回りです...

明らかに、それらはAutoCADで正しく表示されますが、私のパーサーでは、次のように表示されます。

Ellipse3

角度がCWで表されているのかCCWで表されているのかわからないという理由だけで...

グループコードか何かを逃しましたか?

情報:AutoCADでは、最初の楕円「短軸エンドポイント」が[200、-200、0]であり、2番目の楕円が[-200、200、0]であることがわかります。これは、AutoCADが角度はCWまたはCCWです...しかし、DXFファイルにあるのは、「主軸の端点」と「主軸と副軸の比率」(数値)だけです。

この例に対応するDXFファイルは次のとおりです。http://www.woofiles.com/dl-279966-ZvoMjamr-c.dxf

4

2 に答える 2

6

解決済み:押し出しベクトルを考慮するのを忘れました

負の値(0,0、-1)の場合、角度はCWではなくCCWとして扱われる必要があります(またはその逆)。

于 2013-09-05T08:09:29.493 に答える
4

楕円が2DXY平面にない可能性があるため、押し出し方向のZコンポーネントの符号を使用するだけでは安全ではありません。3D楕円のより一般的なアプローチは次のとおりです。

1)長軸を+ X方向に、開始パラメーター(グループコード41)から終了パラメーター(グループコード42)まで反時計回りに移動して、XY平面に楕円を作成します。まず、終了パラメーターが開始パラメーターよりも大きいことを確認し、そうでない場合は2piを追加します。次に、次の方法で各ポイントを計算できます。

X = [length of major radius] * cos(angle)
Y = [length of minor radius] * sin(angle)

2)次の新しい座標系に回転します。

Direction of new X axis = endpoint of major axis
Direction of new Z axis = extrusion direction
Direction of new Y axis = [new Z axis] cross product [new X axis]

これを行うには、これらのベクトルを正規化し、各列にベクトルの1つが含まれる3x3変換行列を作成してから、この行列に、手順1で作成した楕円のすべての点を掛けます。

于 2013-09-11T03:08:08.643 に答える