我已经在使用Macro Editor编写的Catia V5中编写了一些宏,但我无法弄清楚如何从Excel访问Catia命令。
我想知道如何只在excel文件柱体的半径和长度中创建一个简单的直筒。
我想在Catia中输入不同的压力容器,在Excel中输入它们的直径和高度,然后点击那张excel表格中的按钮后,容器应该出现在Catia中。如果我已经需要在Catia中打开一个空的部分,我没有问题,但最好只是让Catia打开而不加载任何东西。
如果我有一个开始,看看如何从Excel访问Catia方法,我想我可以找出完成容器所需的其他方法,如颈部,帽子等。
谢谢。
编辑: 我设法测试了一些东西,我遇到了一个问题,我不知道如何在Excel vba中设置约束。我将代码从Catia vb移动到Visual Express并设法使其在那里工作但是在excel中我没有找到关于如何使用驱动维度的链接。
这是我的代码:
Sub Main()
Dim CATIA As Object
Set CATIA = GetObject(, "CATIA.Application")
Set openDocument = CATIA.ActiveDocument
Set currentPart = openDocument.Part
Set currentHybridBodies = currentPart.HybridBodies
Set currentHybridBody = currentHybridBodies.Add()
Set referenceHybridBody = currentPart.CreateReferenceFromObject(currentHybridBody)
currentPart.HybridShapeFactory.ChangeFeatureName referenceHybridBody, "GeometricalSet"
Set partOriginElements = currentPart.OriginElements
Set plnYZ = currentPart.OriginElements.PlaneYZ
Set currentGeometricalSet = currentPart.HybridShapeFactory
Dim currentOffset As Integer
Dim circleDiameter As Integer
Dim cylinderLength As Integer
currentOffset = 0
circleDiameter = Range("B2").Value
cylinderLength = Range("B3").Value
Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)
currentPart.Update
currentOffset = currentOffset + cylinderLength
circleDiameter = Range("B5").Value
cylinderLength = Range("B6").Value
Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)
openDocument.Part.Update
currentOffset = currentOffset + cylinderLength
circleDiameter = Range("B8").Value
cylinderLength = Range("B9").Value
Call CreateCylinder(0, 0, circleDiameter, cylinderLength, currentOffset)
currentPart.Update
currentOffset = currentOffset + cylinderLength
CATIA.ActiveWindow.ActiveViewer.Reframe
End Sub
Sub CreateCylinder(iCenterX, iCenterY, iDiameter, iLength, iPlaneOffset)
Set CATIA = GetObject(, "CATIA.Application")
Set openDocument = CATIA.ActiveDocument
Set currentPart = openDocument.Part
Set plnYZ = currentPart.OriginElements.PlaneYZ
Set currentGeometricalSet = currentPart.HybridShapeFactory
Set planeOffset1 = currentGeometricalSet.AddNewPlaneOffset(plnYZ, iPlaneOffset, False)
Set currentHybridBody = currentPart.HybridBodies.Item("GeometricalSet")
currentHybridBody.AppendHybridShape (planeOffset1)
openDocument.Part.Update
Set currentBodies = currentPart.Bodies
Set currentBody = currentBodies.Add()
Set currentSketch = currentBody.Sketches.Add(planeOffset1)
Dim Factory2D As Object
Set Factory2D = currentSketch.OpenEdition
Set geometricElements1 = currentSketch.GeometricElements
Dim axis2D1 As Object
Set axis2D1 = geometricElements1.Item("AbsoluteAxis")
Dim line2D1 As Object
Set line2D1 = axis2D1.GetItem("HDirection")
Dim line2D2 As Object
Set line2D2 = axis2D1.GetItem("VDirection")
Set currentCircle = Factory2D.CreateClosedCircle(iCenterX, iCenterY, iDiameter / 2)
Dim point2D1 As Object
Set point2D1 = axis2D1.GetItem("Origin")
Dim constraints1 As Object
Set constraints1 = currentSketch.Constraints
Dim reference2 As Object
Set reference2 = currentPart.CreateReferenceFromObject(currentCircle)
Dim constraint1 As Object
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)
Dim catCstModeDrivingDimensions As Object
'Set constraint1.Mode = catCstModeDrivingDimensions 'Here I get the error
Dim iRadius As Double
iRadius = iDiameter / 2
currentCircle.CenterPoint = point2D1
currentSketch.CloseEdition
Dim newPad As Object
Set newPad = currentPart.ShapeFactory.AddNewPad(currentSketch, iLength)
End Sub
在该注释行上,我收到错误438:对象不支持此属性或方法。
代码在没有该行的情况下工作,但几何元素不受约束,相反它们看起来是固定的,我不想要这样。
该代码在Visual Express中运行良好,并将所有约束放在应有的位置。
任何人都可以告诉我如何将Catia命令链接到excel vb。
这是来自v5自动化文档:
枚举CatConstraintMode { catCstModeDrivingDimension, catCstModeDrivenDimension }
此外,对我的代码的任何反馈都表示赞赏。
谢谢。
编辑: 我似乎可以导入的唯一引用是: references
如果我选择其他人,则会收到错误:加载DLL时出错。 Catia安装在服务器上,但我可以使用浏览指向它...仍然我不知道在那里选择什么,因为有很多文件。
答案 0 :(得分:2)
这是一个创建螺栓的代码。将代码粘贴到Excel中的模块中,并为宏指定一个按钮。
Sub Button1_Click()
Dim CATIA As Object
'Get CATIA or Launch it if necessary.
On Error Resume Next
Set CATIA = GetObject(, "CATIA.Application")
If CATIA Is Nothing Then
Set CATIA = CreateObject("CATIA.Application")
CATIA.Visible = True
End If
On Error GoTo 0
' Add a new Part
Set MyDocument = CATIA.documents.Add("Part")
Set PartFactory = MyDocument.part.ShapeFactory ' Retrieve the Part Factory.
Set MyBody1 = MyDocument.part.Bodies.Item("PartBody")
CATIA.ActiveDocument.part.InWorkObject = MyBody1 ' Activate "PartDesign"
' Creating the Shaft
Set ReferencePlane1 = MyDocument.part.CreateReferenceFromGeometry(MyDocument.part.OriginElements.PlaneYZ)
' Create the sketch1 on ReferencePlane1
Set Sketch1 = MyBody1.Sketches.Add(ReferencePlane1)
Set MyFactory1 = Sketch1.OpenEdition() ' Define the sketch
h1 = Range("E6").Value ' height of the bolt
h2 = Range("E7").Value ' total height
r1 = Range("E8").Value ' external radius
r2 = Range("E9").Value ' Internal radius
s1 = Range("E10").Value ' Size of the chamfer
Set l101 = MyFactory1.CreateLine(0, 0, r1 - 20, 0)
Set l102 = MyFactory1.CreateLine(r1 - 20, 0, r1, -20)
Set l103 = MyFactory1.CreateLine(r1, -20, r1, -h1 + 20)
Set l104 = MyFactory1.CreateLine(r1, -h1 + 20, r1 - 20, -h1)
Set l105 = MyFactory1.CreateLine(r1 - 20, -h1, r2, -h1)
Set l106 = MyFactory1.CreateLine(r2, -h1, r2, -h2 + s1)
Set l107 = MyFactory1.CreateLine(r2, -h2 + s1, r2 - s1, -h2)
Set l108 = MyFactory1.CreateLine(r2 - s1, -h2, 0, -h2)
Set l109 = MyFactory1.CreateLine(0, -h2, 0, 0)
Sketch1.CenterLine = l109
Sketch1.CloseEdition
Set AxisPad1 = PartFactory.AddNewShaft(Sketch1)
' Creating the Pocket
Set ReferencePlane2 = MyDocument.part.CreateReferenceFromGeometry(MyDocument.part.OriginElements.PlaneXY)
' Create the sketch2 on ReferencePlane2
Set Sketch2 = MyBody1.Sketches.Add(ReferencePlane2)
Set MyFactory2 = Sketch2.OpenEdition() ' Define the sketch
D = 1 / 0.866
Set l201 = MyFactory2.CreateLine(D * 100, 0, D * 50, D * 86.6)
Set l202 = MyFactory2.CreateLine(D * 50, D * 86.6, D * -50, D * 86.6)
Set l203 = MyFactory2.CreateLine(D * -50, D * 86.6, D * -100, 0)
Set l204 = MyFactory2.CreateLine(D * -100, 0, D * -50, D * -86.6)
Set l205 = MyFactory2.CreateLine(D * -50, D * -86.6, D * 50, D * -86.6)
Set l206 = MyFactory2.CreateLine(D * 50, D * -86.6, D * 100, 0)
' Create a big circle around the form to get a Hole
Set c2 = MyFactory2.CreateClosedCircle(0, 0, 300)
Sketch2.CloseEdition
Set AxisHole2 = PartFactory.AddNewPocket(Sketch2, h1)
MyDocument.part.Update
End Sub
https://www.dropbox.com/s/rjuadpmsso8fe1p/20160423_2208_36.avi?dl=0