通过单击Excel按钮在Catia中设计零件

时间:2016-03-24 16:33:04

标签: excel vba macros catia

我已经在使用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 }

此外,对我的代码的任何反馈都表示赞赏。

谢谢。

excel sheet

编辑: 我似乎可以导入的唯一引用是: references

如果我选择其他人,则会收到错误:加载DLL时出错。 Catia安装在服务器上,但我可以使用浏览指向它...仍然我不知道在那里选择什么,因为有很多文件。

1 个答案:

答案 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

enter image description here

https://www.dropbox.com/s/rjuadpmsso8fe1p/20160423_2208_36.avi?dl=0