コミュニティ
パーツの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>"
解決済! 解決策の投稿を見る。
質問者です。下記プログラムの場合、
Dim oPartDoc As PartDocument oPartDoc = ThisApplication.ActiveDocument
パーツを開いた画面では、ThisApplication.ActiveDocumentはパーツのことを差すのでエラーが発生しない
アセンブリを開いた画面のなかでパーツ編集状態の場合はThisApplication.ActiveDocumentはアセンブリのことを差すので宣言した型と一致しないためエラーが発生すると考えているのですが、ThisApplication.ActiveDocumentの部分を何に変更すればいいのかがわかりません。
アセンブリ画面で上書き保存の操作をした場合に、このタイミングで各パーツに挿入されているilogicをエラーなく走らせるには、どういった住所?の指定をすればよいのでしょうか?
英語のサイトも探しているのですが、英語力があまりないため目的の回答が見つかりません。
些細なことでも結構ですので、アドバイスいただけたらと思います。よろしくお願いいたします