OLEでグループDBインデックス取得方法を教えてください
解決済み

製品タグ

グループ化されたポイント記号の座標値を取得しようと考えています。図面にグループを作成し追加は可能なのですが、既にCADに書かれているグループのDBインデックスを取得するには、どのコードを使用したら良いのでしょうか。


アバター naka
回答数: 4
閲覧数: 49
投稿日: 2010年09月15日

回答4件

No.1
アバター hGnd

こんにちは

ご質問について、一般的な作図要素は順次読めてますでしょうか?
どのコードというのがあれですが、コード書くとアラ!が出てしまうので、以下は大まかな流れだけです。

付属のoleatman.docによると、

1.GetHeadPosisionで先頭のインデックスを得る
2.そのインデックスからGetKindで要素の種類を判断して・・・
3.それがグループ(1024)だったら、
グループ内順次取得の一連のAPIを使用して
***グループ以外の場合は5の処理へ***
4.そのグループに属する要素を要素数分繰り返し読み出す(GetGroupHeadPosision/GetGroupNextPosisionなど使用して)
5.要素に対して必要な何らかの処理を行う
6.GetNextPosisionで次のインデックスを得る
7.2以降の繰り返しで最後までか、要素数分
これを繰り返す

概ねこういった流れになるのではないかと思います。
別のWATHelp.chmの方のAPIを使うともっと色々できるかもしれませんが、私の方が自信がないので、この辺で失礼します。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2010年9月28日 6:49 PM
No.2

お粗末ですが私の作ったコードを貼っておきます。VB6なので最近の環境で動作するか疑問ですが..(汗

処理の流れは、図上に書かれた要素を選択させてスプラインなどの曲線かを判定しています。グループ化された要素の中に曲線があるかの判定もしています。

やっていることはhGndさんの解説そのまんまです。

Set Doc = Nothing
Set Doc = App.GetDoc ‘現在読込まれている図面を取得する。
Dim gpos As Long, gcount As Long, flg As Boolean

App.setmessage “曲線を指定して下さい。”
lpos = Doc.gettouchprimitive

If Doc.getkind(lpos) = 64 Then
henkei2
Else
If Doc.getkind(lpos) = 1024 Then
gpos = lpos
gcount = Doc.getgroupcount(gpos)
lpos = Doc.getgroupheadposition(gpos)

Do
If Doc.getkind(lpos) = 64 Then
henkei2
flg = True
Exit Do
Else
lpos = Doc.getgroupnextposition(gpos)
End If
Loop While lpos Doc.getgrouptailposition(gpos)

If flg = False Then MsgBox “曲線ではありません。”
Else
MsgBox “曲線ではありません。”
End If
End If

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2010年10月1日 11:54 AM
No.3

スペースが詰められて読みにくくなってしまいました…ざんねん。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2010年10月1日 11:56 AM
No.4
アバター naka

ありがとうございます。
確かめてみます。うまくできましたらまたご報告いたします。

1つ星2つ星3つ星4つ星5つ星 (まだ評価がありません)
読み込み中...
投稿日: 2010年10月5日 7:58 AM

トピック「OLEでグループDBインデックス取得方法を教えてください」への新規返信追加は締め切られています。