長穴中心線(座標軸線)作成マクロ|CATIAマクロの作成方法

今回の記事は「お問い合わせ」より頂いた内容です。

今回の内容は以前作成した穴中心線(座標軸線)作成マクロの派生マクロです。
そのためコードの内容がほとんど同じなので、本ページでコード解説は行っていません。
コードの内容を理解したい方は上記マクロのページを参照下さい。

 

マクロの機能

今回作成したマクロは
『ユーザーが選択した長円エッジに対して穴中心線(座標軸線)を作成するマクロ』です。

具体的な機能は以下のとおりです。

  マクロの機能まとめ ・ユーザーに長穴エッジ(両側の円弧)を選択させる
・選択された長円エッジに対して軸線を作成する
・作成した形状は全てツリー第1階層に作成する新規形状セットにまとめる

 

サンプルコード

マクロのサンプルコードは以下のとおりです。

Option Explicit

Sub CATMain()

    Dim SEL
    Set SEL = CATIA.ActiveDocument.Selection
    
    Dim VPS As VisPropertySet
    Set VPS = SEL.VisProperties
    
    Dim filter1
    Dim filter2
    Dim msg As String
    Dim Status As String
    
    filter1 = Array("BiDimFeatEdge")
    msg = "エッジ1(円弧)を選択して下さい。"
    
label1:
    
    Status = SEL.SelectElement2(filter1, msg, False)
    If Status <> "Normal" Then
        MsgBox "キャンセルします。"
        Exit Sub
    End If
    
    Dim SelEdge1 As Edge
    Set SelEdge1 = SEL.Item(1).Value
    
    SEL.Clear
    
    'エッジを含むCATPart(PartDocumrnt)を取得
    
    Dim tmp_Obj
    Set tmp_Obj = SelEdge1
    
    Do Until TypeName(tmp_Obj) = "PartDocument"
        Set tmp_Obj = tmp_Obj.Parent
    Loop
    
    Dim Doc As PartDocument
    Set Doc = tmp_Obj
    
    
    '選択されたエッジが円か確認
    
    Dim SPA As Workbench
    Set SPA = Doc.GetWorkbench("SPAWorkbench")
    
    Dim ConfMeasure
    Set ConfMeasure = SPA.GetMeasurable(SelEdge1)
    
    Dim check As Boolean
    check = False
    
    On Error GoTo ErrLabel
        Dim getvalues1(2) As Variant
        ConfMeasure.GetCenter getvalues1
    On Error GoTo 0
    
    Dim Radius1 As Double
    Radius1 = ConfMeasure.Radius
    
    check = True
    
    
label2:
    
    filter2 = Array("BiDimFeatEdge")
    msg = "エッジ2(円弧)を選択して下さい。"
    
    Status = SEL.SelectElement2(filter2, msg, False)
    If Status <> "Normal" Then
        MsgBox "キャンセルします。"
        Exit Sub
    End If
    
    Dim SelEdge2 As Edge
    Set SelEdge2 = SEL.Item(1).Value

    SEL.Clear
    
    
    Set ConfMeasure = SPA.GetMeasurable(SelEdge2)
    
    On Error GoTo ErrLabel
        Dim getvalues2(2) As Variant
        ConfMeasure.GetCenter getvalues1
    On Error GoTo 0
    
    Dim Radius2 As Double
    Radius2 = ConfMeasure.Radius
    

    Dim PT As Part
    Set PT = Doc.Part

    Dim HB As HybridBody
    Set HB = PT.HybridBodies.Add
    HB.Name = "長穴中心線(座標軸線)"

    Dim HSF As HybridShapeFactory
    Set HSF = PT.HybridShapeFactory
    


    '① 選択されたエッジの中心点作成

    Dim EdgeCtrPoint1 As Point
    Set EdgeCtrPoint1 = HSF.AddNewPointCenter(SelEdge1)

    HB.AppendHybridShape EdgeCtrPoint1
    PT.Update
    
    Dim EdgeCtrPoint2 As Point
    Set EdgeCtrPoint2 = HSF.AddNewPointCenter(SelEdge2)

    HB.AppendHybridShape EdgeCtrPoint2
    PT.Update
    
    
    '② 選択されたエッジを通る平面を作成
    
    Dim NormPlane As Plane
    Set NormPlane = HSF.AddNewPlane1Curve(SelEdge1)
    
    HB.AppendHybridShape NormPlane
    PT.Update
    

    '③ ①の2点を通る直線を作成

    Dim RefPoint1 As Reference
    Set RefPoint1 = PT.CreateReferenceFromObject(EdgeCtrPoint1)
    
    Dim RefPoint2 As Reference
    Set RefPoint2 = PT.CreateReferenceFromObject(EdgeCtrPoint2)
    
    Dim RefPlane As Reference
    Set RefPlane = PT.CreateReferenceFromObject(NormPlane)

    Dim AxisLine1 As Line
    Set AxisLine1 = HSF.AddNewLinePtPtOnSupportExtended(RefPoint1, RefPoint2, RefPlane, Radius1 + 5, Radius2 + 5)

    HB.AppendHybridShape AxisLine1
    PT.Update
    
    
    '④ ③で作成した直線の中心点を作成
    
    Dim RefAxisLine1 As Reference
    Set RefAxisLine1 = PT.CreateReferenceFromObject(AxisLine1)
    
    Dim CtrPoint As Point
    Set CtrPoint = HSF.AddNewPointOnCurveFromPercent(RefAxisLine1, 0.5, False)
    
    HB.AppendHybridShape CtrPoint
    PT.Update
    
    
    '⑤ ④を通り②に直交な直線を作成
    
    Dim RefCtrPoint As Reference
    Set RefCtrPoint = PT.CreateReferenceFromObject(CtrPoint)
    
    Dim AxisLine2 As HybridShapeLineNormal
    Set AxisLine2 = HSF.AddNewLineNormal(RefPlane, RefCtrPoint, 10, -10, False)
    
    HB.AppendHybridShape AxisLine2
    PT.Update
    
    
    '⑥ ③の直線を⑤の直線を軸に90deg回転した位置に直線を作成
    
    Dim RefAxisLine As Reference
    Set RefAxisLine = PT.CreateReferenceFromObject(AxisLine1)
    
    Dim AxisLine3 As Line
    Set AxisLine3 = HSF.AddNewLineAngle(RefAxisLine1, RefPlane, RefCtrPoint, True, Radius1 + 5, -1 * (Radius2 + 5), 90, False)
    
    HB.AppendHybridShape AxisLine3
    PT.Update
    
    
    With SEL
        .Add EdgeCtrPoint1
        .Add EdgeCtrPoint2
        .Add NormPlane
    End With
    
    VPS.SetShow catVisPropertyNoShowAttr
    SEL.Clear

    Exit Sub

ErrLabel:

    MsgBox "エッジは円弧を選択してください。"
    SEL.Clear
    
    If check = False Then
        Resume label1
    ElseIf check = True Then
        Resume label2
    End If
        
End Sub

 

まとめ

今回は「長穴中心線(座標軸線)作成マクロ」についての内容でした。
基本的には以前作成した「穴中心線(座標軸線)作成マクロ」と同じようなコードとなっています。

VBAでの形状作成は「HybridShapeFactory」(GSDの場合)を使って、ほとんど同じことの繰り返しなのでコードが長くなってもやっていること自体は単純です。今回のマクロもユーザーに2つの直線エッジを選択させ、そのエッジを使って形状作成をしているだけです。

VBAで形状作成を作成したい場合は「HybridShapeFactory」(GSDの場合)もしくは「ShapeFactory」(パートデザインの場合)さえ押さえておけば問題ありません。
 

目次へ戻る
 

icon-book CATIAマクロを本気で勉強するなら

 

2024年8月26日CATIA,CATIAマクロ