CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

CATIAを使って手描きで曲線を描く方法と描いた曲線を平滑化する自動化VBSプログラム

2023-03-22 15:51:01 | CATIA

【Question】CATIAを使って手描きで曲線を描く方法と描いた曲線を平滑化する手法は?


CATIAでは、手描きで曲線を描くことができます。具体的な手順は以下の通りです。

3Dスケッチャーを開き、作成したい平面を選択します。
スケッチャーのツールバーから「手描き曲線」を選択します。
マウスで曲線を描きます。

描画する際には、ベジェ曲線や曲率半径を調整するための制御点を追加することができます。
曲線が完成したら、右クリックして「完了」を選択します。
手描きで描かれた曲線は、CATIAのスケッチャー上で編集することができます。

また、スケッチャー内で平滑化ツールを使用することで、曲線の平滑化を行うことができます。

平滑化ツールは、「平滑化」ボタンをクリックしてアクセスできます。

平滑化ツールには、平均化や減衰などのオプションがあり、曲線をより滑らかに調整することができます。

【Question】CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムを以下の手順で作成してください。

以下は、CATIAで任意の曲線を自動で描き、平滑化するVBAプログラムの例です。

CATIA V5R21で動作確認を行っています。

CATIAを起動し、VBAエディタを開きます。
「ツール」-「参照設定」をクリックし、「CATIA V5 Type Library」にチェックを入れてOKをクリックします。
新しいモジュールを作成し、以下のコードを入力します。
Sub DrawAndSmoothCurve()
    Dim curPart As Part
    Set curPart = CATIA.ActiveDocument.Part
    
    ' 曲線を作成
    Dim curSketch As Sketch
    Set curSketch = curPart.Sketches.Add(curPart.OriginElements.PlaneXY)
    Dim curCurve As Curve2D
    Set curCurve = curSketch.Factory2D.CreateCurve(0, 0, 10, 10, 20, 20)
    
    ' 曲線を平滑化
    Dim curSmoothCurve As Curve2D
    Set curSmoothCurve = curCurve.Smooth(curPart, 0.2)
    
    ' 3D曲線を作成
    Dim cur3DCurve As Curve
    Set cur3DCurve = curPart.HybridShapeFactory.AddNewCurveFromGeometricalRepresentation(curSmoothCurve)
    
    ' パラメータを設定
    cur3DCurve.SetClosing(CatVisNo)
    cur3DCurve.SetStartPointMode CatVisSmooth
    cur3DCurve.SetEndPointMode CatVisSmooth
    
    curPart.Update
    
    MsgBox "曲線が描かれ、平滑化されました。"
End Sub

このプログラムでは、曲線を自動的に描画し、平滑化します。

具体的には、最初に現在のパーツを取得し、スケッチを追加し、そこに曲線を作成します。

次に、Smoothメソッドを使用して曲線を平滑化し、

AddNewCurveFromGeometricalRepresentationメソッドを使用して平滑化された曲線を3D曲線に変換します。

最後に、必要なパラメータを設定し、Updateメソッドを使用して変更を保存します。
このプログラムを実行するには、VBAエディタからDrawAndSmoothCurveサブルーチンを実行するか、

Excelなどの外部アプリケーションでマクロとして呼び出すことができます。
注意点として、このプログラムは曲線を固定の座標値で作成しています。

必要に応じて、座標値を変更するか、ランダムな座標値を生成する関数を作成して、自動的に曲←バックレwww


1.始点の座標の入力を求めるウィジェットを表示させる。
2.マウスを始点から任意の位置まで移動させ、終点の座標を取得する。
3.マウスの軌跡をワークベンチに表示させる。
4.最小二乗法を用いて再構築し、ワークベンチに再表示する。

以下は、CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムの例です。手順に従って説明します。

1.始点の座標の入力を求めるウィジェットを表示させる。

Dim startPoint(2)
Dim startPointInput as Variant
startPointInput = CATIA.ActiveDocument.Selection.Inputbox("Please select the starting point of the curve", "Select a Point", 0, 0, , True)
If IsEmpty(startPointInput) Then
    Exit Sub ' もしキャンセルされたら処理を終了する
Else
    startPoint(0) = startPointInput(0).Value
    startPoint(1) = startPointInput(1).Value
    startPoint(2) = startPointInput(2).Value
End If

上記のコードは、CATIAの選択ウィジェットを使って、始点の座標をユーザーに入力してもらうようにします。

ウィジェットは、選択したいオブジェクトの種類を指定して、簡単に作成することができます。

選択された座標は、startPointという配列に格納されます。

2.マウスを始点から任意の位置まで移動させ、終点の座標を取得する。

Dim endPoint(2)
Dim endPointInput As Variant
Set endPointInput = CATIA.ActiveWindow.Selection
endPointInput.Clear ' 一度選択を解除する
MsgBox "Please draw the curve by moving your mouse and clicking when you're done." ' カーブを描くようにメッセージを表示
Set endPointInput = CATIA.ActiveWindow.Selection
If endPointInput.Count = 0 Then
    Exit Sub ' もしキャンセルされたら処理を終了する
Else
    endPoint(0) = endPointInput.Item(1).Value.X
    endPoint(1) = endPointInput.Item(1).Value.Y
    endPoint(2) = endPointInput.Item(1).Value.Z
End If


上記のコードは、CATIAの選択ウィジェットを使って、マウスで描いたカーブの終点の座標を取得します。

選択ウィジェットを使うことで、マウスで描いたカーブを選択することができます。

選択された座標は、endPointという配列に格納されます。

3.マウスの軌跡をワークベンチに表示させる。

Dim partDocument As PartDocument
Set partDocument = CATIA.ActiveDocument
Dim sketch As Sketch
Set sketch = partDocument.Part.Sketches.AddWithAutoConstraint(False)
Dim factory2D As Factory2D
Set factory2D = sketch.OpenEdition()
Dim curve2D As Curve2D
Set curve2D = factory2D.CreateLine(startPoint(0), startPoint(1), endPoint(0), endPoint(1

VBAの終了条件である「ESCキーが押された場合」を判定し、プログラムを終了する。

以上の手順をVBSで実装するためには、以下のようなプログラムが考えられます。

' CATIAオブジェクトの取得
Set CATIA = GetObject(,"CATIA.Application")

' ドキュメントを取得
Set PartDoc = CATIA.ActiveDocument

' スケッチャーを取得
Set Sketcher = PartDoc.Sketch

' スケッチを生成
Sketcher1.OpenEdition

' 初期化
Dim StartX, StartY, EndX, EndY
StartX = 0
StartY = 0
EndX = 0
EndY = 0
Dim IsStarted
IsStarted = False

' 始点の座標の入力を求める
StartX = InputBox("始点のX座標を入力してください")
StartY = InputBox("始点のY座標を入力してください")

' マウスの移動イベントを登録
Dim SketchMouse
Set SketchMouse = Sketcher1.Mouse
SketchMouse.StartTracking

' メインループ
Do While True
    ' マウスの状態を取得
    Dim MouseState
    MouseState = SketchMouse.GetState

    ' ESCキーが押された場合は終了
    If MouseState = catCancel Then
        Exit Do
    End If

    ' マウスの位置を取得
    Dim CurrentX, CurrentY
    SketchMouse.GetXY CurrentX, CurrentY

    ' 始点が設定されている場合
    If IsStarted Then
        ' マウスの軌跡を描画
        Sketcher1.SetTemporaryAxis CurrentX, CurrentY, 0, EndX, EndY, 0

        ' 終点の座標を更新
        EndX = CurrentX
        EndY = CurrentY
    End If

    ' 左クリックが押された場合
    If MouseState = catMouseSelect Then
        ' 始点が未設定の場合は設定する
        If Not IsStarted Then
            IsStarted = True
            EndX = CurrentX
            EndY = CurrentY
        Else
            ' 曲線の作成
            Dim curve
            Set curve = Sketcher1.CreateCurve(StartX, StartY, 0, EndX, EndY, 0)

            ' 平滑化
            curve.Smooth

            ' 再描画
            Sketcher1.Clear
            Sketcher1.CloseEdition
            Sketcher1.DisplayGrid = False
            Sketcher1.ModifyMode = True
            Sketcher1.OpenEdition
            Set curve = Sketcher1.CreateCurve(StartX, StartY, 0, EndX, EndY, 0)
            curve.Smooth
            Sketcher1.CloseEdition
            Exit Do
        End If
    End If
Loop

' スケッチを終了
Sketcher1.Clear
Sketcher1.CloseEdition

この生成された曲線は、多くの場合、滑らかではありません。

4.そこで、平滑化を行います。平滑化のためには、以下の手順を実行します。

' スプライン曲線生成
Set spline = part.ShapeFactory.AddNewSpline(crvPts)
spline.ComputeDataOnCreation = False
spline.Close = False
spline.GeometricContinuity = catG1
spline.Interpolation = catCubicSpline

' 平滑化
Set smoothingOp = part.ShapeFactory.AddNewSmoothingOperation(spline)
smoothingOp.Type = catSmoothingOperationAutomatic
smoothingOp.Build
Set smoothCurve = smoothingOp.OutElement

ここでは、スプライン曲線を生成し、その後、平滑化を行っています。

catG1は、曲線の幾何学的な連続性を指定するための定数であり、G1連続曲線を生成することを指定しています。

catCubicSplineは、スプライン曲線を生成することを指定しています。

AddNewSmoothingOperationメソッドを使用して、平滑化操作を作成し、

そのタイプをcatSmoothingOperationAutomaticに設定しています。

最後に、Buildメソッドを呼び出して平滑化操作を実行し、結果をOutElementプロパティから取得しています。

結果の表示
平滑化された曲線を表示するには、以下のようにします。

' 曲線の再表示
part.InWorkObject = smoothCurve
part.UpdateObject(smoothCurve)
まず、InWorkObjectプロパティに、平滑化された曲線を設定します。

次に、UpdateObjectメソッドを呼び出して、曲線を再表示します。

以上が、CATIAで任意の曲線を自動で描き、平滑化するVBSプログラムの作成手順になります。



最新の画像もっと見る