请记住我在CATIA VBA方面的有限知识。我在自定义CATIA V5宏以浏览Excel坐标点并在CATIA中绘制时遇到了一些困难,所有这些都需要单击自定义的CATIA图标。
- 我有一个Excel文件,里面有很多XYZ坐标,称之为ExcelP1(excel文件中没有脚本/宏),我想开发CATIA中的宏读取&从ExcelP1绘制点
-
目前我有另一个"带宏的Excel文件"要浏览ExcelP1,并在CATIA中绘制点。但我需要打开并运行"带有宏的Excel文件"首先启动CATIA。脚本是如下(我没有开发这个)
Public Filename As String Private Sub Browse_Click() 'Open File Mainform.Hide Filename = Application.GetOpenFilename("Excel Files (*.xls), *.xls") If Filename <> "False" Then Application.Visible = False filenamebox.Value = Filename Else Application.Visible = False Filename = filenamebox.Value End If Mainform.Show End Sub Private Sub ClearButton_Click() Mainform.Hide ActiveWorkbook.Close (False) Application.Visible = False End Sub Private Sub OKButton_Click() 'Set Up Message Labels Title = "Information Message" 'Check for Entered Values If filenamebox.Value <> "" Then Workbooks.Open Filename:=Filename Application.Visible = False 'Start CATIA and add an Open body to the document Start_CATIA Mainform.Hide 'Read Point Data from file and create point in CATIA i = 2 Do Until Worksheets("Sheet1").Range("a" & i).Value = "" x = Worksheets("Sheet1").Range("a" & i).Value y = Worksheets("Sheet1").Range("b" & i).Value z = Worksheets("Sheet1").Range("c" & i).Value Create_Point i = i + 1 Loop i = i - 2 MsgBox i & " Points Created in New Part", , Title Else MsgBox "Enter a Filename", , Title End If ActiveWorkbook.Close (False) Mainform.Show End Sub Private Sub UserForm_Initialize() If Worksheets("Filepath_Location").Range("a1").Value <> "" Then Filename = Worksheets("Filepath_Location").Range("a1").Value filenamebox.Value = Filename End If End Sub
为了让脚本在CATIA中运行,我需要添加/修改什么?
启动Catia并获得应用程序后,您需要做的第一件事是创建一个新的Part,在其中添加点。
Dim MyPartDocument As PartDocument
Dim MyPart As Part
Dim PointGeoSet As HybridBody
Set MyPartDocument = CATIA.Documents.Add("Part")
Set MyPart = MyPartDocument.Part
Set PointGeoSet = MyPart.HybridBodies.Add()
PointGeoSet.Name = "MyPoints"
下一步是使用这样的函数从excel数据中创建点。我喜欢创建一个包装器,但你可以随意重写:
Sub CreateXYZPoint(TargetPart As Part, TargetGeometricalSet As HybridBody, _
Xmm As Double, Ymm As Double, Zmm As Double, _
PointCount As String)
Dim HSFactory As HybridShapeFactory
Dim NewPoint As Point
'get the factory
Set HSFactory = TargetPart.HybridShapeFactory
'create the point with the factory
Set NewPoint = HSFactory.AddNewPointCoord(Xmm, Ymm, Zmm)
'Append the point to the geometrical set
TargetGeometricalSet.AppendHybridShape NewPoint
'rename the point
NewPoint.Name = "Point." & PointCount
End Sub
你会打电话循环中的CreateZYXPoint MyPart, PointGeoSet,x,y,z,cstr(i)
最后,在循环结束时,您将希望更新零件,因此调用:MyPart.Update
在程序结束时进行一次更新要比在创建每个点后进行更新快得多。
这应该会让你开始。记住,Catia使用毫米作为其基本内部单位。因此,您的电子表格匹配单位,或者您必须在调用CreateXYZPoint之前进行单位转换。。。或者不管你想怎么做。
让我知道这是否适合你。
编辑:这里有一个链接,指向与上面的代码放在一起的代码。你需要确保你的excel代码正常工作,但我插入的Catia代码是正确的:http://pastebin.com/vxFcPw52