すっかりペースダウンです。 VBAをC#にするだけを考えれば
そこそこネタはあるのですが、業務が忙しくなりC#化している暇がないです。
自分の場合、客先で使用しているCADの関係もあり、2Dは他のCADを使用
しているのですが、3D→2D化自体はCATIAを使用しています。
その場合、DXF(又はDWG)経由で行うのですが、原点の位置がわからなく
なってしまいます。
手動でチマチマ描くのも面倒なため、マクロで一気に書いています。
'vba Sub CATMain() 'アクティブなシートの全てのビューの原点に十字をつける Dim Actdoc As DrawingDocument Dim ActSheet As DrawingSheet Dim Views As DrawingViews Dim StartView As DrawingView Set Actdoc = CATIA.ActiveDocument Set ActSheet = Actdoc.Sheets.ActiveSheet Set Views = ActSheet.Views Set StartView = Views.ActiveView Dim i As Long Dim Fac As Factory2D Dim View As DrawingView For i = 3 To Views.Count Set View = Views.item(i) If Not IsAbsLine(View) Then Call View.Activate Set Fac = View.Factory2D Call Create_Line(Fac, Actdoc, -20, 0, 20, 0) Call Create_Line(Fac, Actdoc, 0, -20, 0, 20) Set Fac = Nothing Set View = Nothing End If Next i Call StartView.Activate End Sub Private Sub Create_Line(ByRef Fac As Factory2D, _ ByVal Doc As Document, _ ByVal X1 As Double, _ ByVal Y1 As Double, _ ByVal X2 As Double, _ ByVal Y2 As Double) Dim L2D As Line2D Dim oSel As selection Set oSel = Doc.selection Set L2D = Fac.CreateLine(X1, Y1, X2, Y2) Call oSel.Clear oSel.add L2D With oSel.VisProperties .SetRealLineType 4, 0 .SetRealWidth 1, 0 End With L2D.name = "Abs_Line"'① Call oSel.Clear End Sub Private Function IsAbsLine(ByVal View As DrawingView) As Boolean'② IsAbsLine = False For Each L In View.GeometricElements If L.name = "Abs_Line" Then IsAbsLine = True Exit For End If Next End Function
断面や矢視の向き、線の長さが40mm固定等、ウンヌンありますが、
とりあえず事が足りているのでこのまま使っています。
①:このマクロで作成したラインに"Abs_Line"と言う名称を付けています。
理由としては、複数回マクロを実行した際に同じラインが何度も
作成されてしまうの事を防ぐためです。
②:①で作成したラインがView内に存在しているか?をチェックしています。
かなり前に作ったマクロなため、色々とイマイチな部分がありますね・・・。