通过单击Excelbutton在Catia中devise零件
我已经在macros编辑器中编写的Catia V5中编写了一些macros,但我无法弄清楚如何从Excel访问Catia命令。
我想知道如何创build一个简单的直筒,只有在excel文件圆柱体的半径和长度。
我想通过在Excel中input它们的直径和高度来在Catia中制作不同的压力容器,并且在点击该Excel表格中的button之后,该容器应该出现在Catia中。 如果我已经需要在卡蒂亚打开一个空的部分,我没有任何问题,但最好只是让卡蒂亚打开没有加载任何东西。
如果我有开始,看看如何从Excel中访问Catia方法,我想我可以找出完成该容器所需的其他方法,如脖子,帽子等。
谢谢。
编辑:我设法testing一些东西,我卡住了一个问题,我不知道如何设置约束在Excel VBA。 我将代码从Catia vb移到Visual Express,并设法在那里工作,但在Excel中,我没有find如何使用驱动维度的链接。
这是我的代码:
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命令来优化VB。
这是从v5自动化文档:
枚举CatConstraintMode {catCstModeDrivingDimension,catCstModeDrivenDimension}
还有我的代码反馈意见。
谢谢。
Excel表格
编辑:我似乎被允许导入的唯一引用是这些: 引用
如果我select其他人,我收到一个错误:加载DLL时出错。 Catia安装在服务器上,但我可以指向它使用浏览…仍然我不知道该select那里,因为有很多的文件。
这是创build一个螺栓的代码。 将代码粘贴到Excel中的模块中,并将一个button分配给macros。
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