Question
InventorのAPIで2D図面上の任意の2点の座標を指定して寸法を追加する方法はありますか。
Answer
入力となる座標に2D図面上で図形が存在しない場合、Inventorの図面寸法を作成することができません。
このため、任意の2点の座標から長さ寸法を挿入したい場合、スケッチ上に入力座標でポイントを作成し、ポイント間の拘束寸法を作成、作成した寸法を図面に取り込むことで寸法を発生させる必要があります。
なお、この方法で作成した寸法はスケッチでの入力点に拘束されているため、図面上の図形や、ビューの元データのモデルの更新に追随して更新されません。
また、拘束寸法をシートに取り込んだ場合、寸法値はドキュメントの規格設定によりinchまたはmmとなります。寸法値をcm等の別の単位で表示したい場合は、シートに取得したスケッチの拘束寸法に対して値の上書きを行う必要があります。なお、寸法値の上書きを行っている場合スケッチ上で拘束寸法の変更を行った場合においても、値の更新が自動で行われない(上書き値が表示される)点に注意が必要です。
以下は2点の座標を元にスケッチに点を追加、拘束寸法を作成後にシートに取り込みを行うVBAのサンプルコードです。
Dim oDoc As DrawingDocument
Set oDoc = ThisApplication.ActiveDocument
Dim oSheet As sheet
Set oSheet = oDoc.ActiveSheet
Dim oSketch As sketch
Dim oDimensionConstraint As DimensionConstraint
Set oDimensionConstraint = addDimensionBySketchPoint(oSheet, "スケッチ1", 10, 10, 12, 10)
Dim oConsraintDimensionCollection As ObjectCollection
Set oConsraintDimensionCollection = ThisApplication.TransientObjects.CreateObjectCollection
oConsraintDimensionCollection.Add oDimensionConstraint
'retrieve model dimension
Call oSheet.DrawingDimensions.GeneralDimensions.Retrieve(oDimensionConstraint.Parent, oConsraintDimensionCollection)
End Sub
Public Function addDimensionBySketchPoint(oSheet As sheet, sketchName As String, x1 As Double, y1 As Double, x2 As Double, y2 As Double) As DimensionConstraint
Dim oTg As TransientGeometry
Set oTg = ThisApplication.TransientGeometry
Dim oSketch As DrawingSketch
On Error Resume Next
Set oSketch = oSheet.Sketches(sketchName)
On Error GoTo 0
If oSketch Is Nothing Then
Set oSketch = oSheet.Sketches.Add()
End If
oSketch.Edit
Dim p1 As Point2d
Set p1 = oTg.CreatePoint2d(x1, y1)
Dim p2 As Point2d
Set p2 = oTg.CreatePoint2d(x2, y2)
Dim skP1 As SketchPoint
Set skP1 = oSketch.SketchPoints.Add(p1, False)
Dim skP2 As SketchPoint
Set skP2 = oSketch.SketchPoints.Add(p2, False)
Dim tp As Point2d
Set tp = oTg.CreatePoint2d((x2 + x1) / 2, (y2 + y1) / 2)
Dim oTwoPointDistanceDimConstraint As TwoPointDistanceDimConstraint
Set oTwoPointDistanceDimConstraint = oSketch.DimensionConstraints.AddTwoPointDistance(skP1, skP2, kHorizontalDim, tp)
Set addDimensionBySketchPoint = oTwoPointDistanceDimConstraint
oSketch.ExitEdit
記事全体を表示