仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/11/23 - 16:05:01
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: サーフェスに描かれたカーブ上の法線の取得に失敗する 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: サーフェスに描かれたカーブ上の法線の取得に失敗する  (閲覧数 2099 回)
chura
Jr. メンバー
**

オフライン

投稿: 25



I'm a llama!

プロファイルを見る
サーフェスに描かれたカーブ上の法線の取得に失敗する
« 投稿日: 2006/08/31 - 16:15:49 »
引用して返信

いつもお世話になっております。

フェイス上に描いたカーブの法線を取得するため次のような手順で
プログラミングしています。

 (1)対象となるフェイスとカーブを取得 ←当然これは交差している
 (2)カーブ上の点を取得(Evaluate)  ←カーブ上の点なのでフェイス上の点のはず
 (3)フェイスからサーフェスを取得
 (4)点を指定してサーフェス上の法線を取得(EvaluateAtPoint)
 
ほぼ、これで正常に動作しているのですが、曲面上に描かれたカーブに
ついては部分的に失敗するのです。具体的には(4)のEvaluateAtPoint
にてエラーが返ってきます。

サンプル(VB6版)を添付しましたのでお手すきの方は一度確認していた
だければ幸いです(当方の環境はSW2004+VB6、またはVC6です)。
 
<使い方>
 (1)アドイン(sample.dll)をSWに登録します
 (2)添付のパーツ(spline_Work.sldprt)を読み込みます
 (3)メニューにSampleが表示されるのでクリックします
 (4)SW上でフェイスとエッジ(カーブ)を選択します

 最後にクリックされたフェイスとカーブの法線が描画されます。
 パーツ上のエッジのうち大半は正常に描画されますが、曲面上の
 カーブは数本しか描画されないことが確認いただけるかと思います。

 もしなにか心当たりのある方は些細な情報でも結構ですのでご教授
いただけると幸いですm(_"_)m

#なお、VB上から実行する場合は、OpenGL描画できません。
 
議長に報告する   記録済み
chura
Jr. メンバー
**

オフライン

投稿: 25



I'm a llama!

プロファイルを見る
Re:サーフェスに描かれたカーブ上の法線の取得に失敗する
« 返信 #1 投稿日: 2006/09/04 - 16:49:32 »
引用して返信

いつもお世話になっております。

ファイルを添付し忘れていましたので再送します。

また、本VBプロジェクトをコンパイルする際にはOpenGLのタイプライブラリが必要です。タイプライブラリは以下のURLよりダウンロードできます。

http://home.pacific.net.hk/~edx/tlb.htm


なお、当方の開発環境は次のようになります。
  Windows XP sp2
  SolidWorks 2004〜2006
  VisualBasic6
※最終的にはVCへ移植しますのでVCでの回答も大歓迎です。
 GetNormal.lzh
議長に報告する   記録済み
chura
Jr. メンバー
**

オフライン

投稿: 25



I'm a llama!

プロファイルを見る
(解決!)Re:サーフェスに描かれたカーブ上の法線の取得に失敗する
« 返信 #2 投稿日: 2006/09/14 - 15:58:42 »
引用して返信

本件について解決しましたので報告しておきます。

ポイントは、

 ・サーフェスに描かれたカーブはスプライン曲線である
 ・スプライン曲線は近似的な曲線なので必ずしもサーフェスと一致していない

ということです。
これを解決するための関数が用意されていました。勉強不足を反省です(^^;
この関数は指定点に最も近いサーフェス上の点を取得します。プログラムにするとこんな感じ。


' カーブ上の点を取り出す
vArray = swCurve.Evaluate((eParam - sParam) * N / 分割数)

' サーフェス上の情報を取得する
vParams = swSurface.EvaluateAtPoint(vArray(0), vArray(1), vArray(2))

' 情報取得に失敗した場合の処理
If (IsEmpty(vParams)) Then
    ' 指定点に最も近いサーフェス上の点を取得する
    vClosestPoint = swSurface.GetClosestPointOn(vArray(0), vArray(1), vArray(2))

    '取得できた点を使ってもう一度サーフェス上の情報を取得する
    vParams = swSurface.EvaluateAtPoint(vClosestPoint(0), vClosestPoint(1), vClosestPoint(2))
End If


それでは失礼します。
議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: サーフェスに描かれたカーブ上の法線の取得に失敗する 前のトピック 次のトピック
ジャンプします: