コミュニティ
Inventor - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

材料寸法取得

1件の返信1
解決済み
返信
メッセージ1/2
Anonymous
1222 件の閲覧回数, 1 件の返信

材料寸法取得

パーツのXYZの最大寸法を取得して、ipropertyに出力するプログラムを作りたいのですが

下記ではパーツ環境ではうまく動作するがアセンブリ環境ではエラーとなります。どちらでも正常に動作させることは可能でしょうか?

ご教授お願いいたします。

 

'パーツのXYZの最長距離を測定して格納するDim oPartDoc As PartDocument
oPartDoc = ThisApplication.ActiveDocument
If oPartDoc.ComponentDefinition.SurfaceBodies.Count >1 Then
    BBox_X=0
    BBox_Y=0
    BBox_Z=0
    Exit Sub
End If

Dim oBox As Box
Try
    oBox = oPartDoc.ComponentDefinition.SurfaceBodies.Item(1).RangeBox
Catch
    BBox_X=0
    BBox_Y=0
    BBox_Z=0
    Exit Sub
End Try
     BBox_X= FormatNumber( oBox.MaxPoint.X-oBox.MinPoint.X,5)
     BBox_Y= FormatNumber( oBox.MaxPoint.Y-oBox.MinPoint.Y,5)
     BBox_Z= FormatNumber( oBox.MaxPoint.Z-oBox.MinPoint.Z,5)

Parameter.Quiet = True
'格納したデータmm単位にBBox_X=BBox_X*10
BBox_Y=BBox_Y*10
BBox_Z=BBox_Z*10
'寸法を小さい順に並び替えDim a As Double
Dim b As Double
Dim c As Double
If BBox_X>=BBox_Y Then
    If BBox_Y>=BBox_Z Then
    c=BBox_X
    b=BBox_Y
    a=BBox_Z
        Else
        If BBox_Z>=BBox_X Then
        c=BBox_Z
        b=BBox_X
        a=BBox_Y
        Else
        c=BBox_X
        b=BBox_Z
        a=BBox_Y
        End If
    End If
    Else
    If BBox_X>=BBox_Z Then
    c=BBox_Y
    b=BBox_X
    a=BBox_Z
        Else
        If BBox_Y>=BBox_Z Then
        c=BBox_Y
        b=BBox_Z
        a=BBox_X
        Else
        c=BBox_Z
        b=BBox_Y
        a=BBox_X
        End If
    End If
End If
'小数点をそろえるa=Round(a, 1)
b=Round(b, 1)
c=Round(c, 1)
'テキスト形式にしてカスタムプロパティに出力(数値のままだと10が10.0という表示になるためiProperties.Value("Custom", "a")=CStr(a)
iProperties.Value("Custom", "b")=CStr(b)
iProperties.Value("Custom", "c")=CStr(c)
iProperties.Value("Project", "Description")="=<a>x<b>x<c>"

 

1件の返信1
メッセージ2/2
Anonymous
次のアカウントへの返信: Anonymous

質問者です。下記プログラムの場合、

Dim oPartDoc As PartDocument
oPartDoc = ThisApplication.ActiveDocument

パーツを開いた画面では、ThisApplication.ActiveDocumentはパーツのことを差すのでエラーが発生しない

アセンブリを開いた画面のなかでパーツ編集状態の場合はThisApplication.ActiveDocumentはアセンブリのことを差すので宣言した型と一致しないためエラーが発生すると考えているのですが、ThisApplication.ActiveDocumentの部分を何に変更すればいいのかがわかりません。

アセンブリ画面で上書き保存の操作をした場合に、このタイミングで各パーツに挿入されているilogicをエラーなく走らせるには、どういった住所?の指定をすればよいのでしょうか?

英語のサイトも探しているのですが、英語力があまりないため目的の回答が見つかりません。

些細なことでも結構ですので、アドバイスいただけたらと思います。よろしくお願いいたします

 

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿