2012-01-23 33 views
13

私は自分自身のASCII DXFファイルパーサーを書いており、特定の文書の楕円に問題が発生しました。DXFパーサー:楕円の角の方向

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

簡素化するために、ここでは視覚的exempleです:あなたが見ることができるように

Ellipse1 Ellipse2

は、最初のものは持っています開始角度135、第2の開始角度45 ... しかし、楕円は同じように見えます(左半分の円)...これは最初の角度が時計回りであり、もう1つは反時計回りです...

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

Ellipse3

角度がCWまたはCCWを表現している場合、私は知らないという理由だけで...

はなかったです私はグループコードなどが恋しいですか?

Info:AutoCADでは、最初の楕円 "マイナーアクシスエンドポイント"が[200、-200、0]で、2番目のものは[-200,200,0]であることがわかりますAutoCADは角度がCWかCCWかを知っていますが、DXFファイル内にあるのは、「主軸終点」と「小軸対小数点」です(数字)

これはDXFファイルです解決http://www.woofiles.com/dl-279966-ZvoMjamr-c.dxf

+3

解決済み:押し出しベクトルを考慮していませんでした... – ingham

+0

あなたの質問は非常に明確で文書化されています。おめでとう!あなた自身で問題を解決してくれてよかったです。 – cma

+0

@ingham私はあなたがこのコメントを取って回答として追加することをお勧めします。これは私にとって貴重なものでした。私は答えだけでなく質問もアップアップしたいと思います。時計回りであるかどうかを計算するために押出ベクトルをどのように使用したかを知ることができれば、さらに価値が高くなります。 – daramarak

答えて

1

:この例に私はそれが負である場合には(0,0、-1)、角度はでCCWのように処理しなければならないアカウントに押出ベクトル

を取るのを忘れCWの代わりに

2

楕円は2D XY平面内にないため、押し出し方向のZ成分の符号を使用するだけで安全ではありません。

1)+ X方向に長軸を持ち、開始パラメータ(グループコード41)から反時計回りに楕円を作成して、終了パラメータ(グループコード42)。最初に、endパラメータがstartパラメータよりも大きいことを確認し、そうでない場合は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] 

あなたは、これらのベクトルを正規化し、各列が含まれている3×3変換行列を作成することによってこれを行うことができベクトルの1つを計算し、次にこの行列にステップ1で作成した楕円の各点を掛けます。