【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プログラムの作成手順になります。