通过单击Excel按钮在Catia中设计零件 [英] Design a Part in Catia by clicking an Excel Button

查看:222
本文介绍了通过单击Excel按钮在Catia中设计零件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在宏编辑器中内置的Catia V5中编写了一些宏,但是我不知道如何从Excel中访问Catia命令.

I already wrote some Macros in Catia V5 built in Macro Editor, but i can't figure out how to access Catia commands from Excel.

我想知道如何仅通过在excel文件中设置圆柱体的半径和长度来创建简单的直线圆柱体.

I would like to know how can I create for instance a simple straight cylinder by only having in the excel file cylinder's radius and length.

我想通过在Excel中输入直径和高度来在Catia中制作不同的压力容器,然后在该Excel工作表中单击一个按钮后,该容器应出现在Catia中.如果我已经需要在Catia中打开一个空的零件,我没有问题,但是最好是将Catia打开时不装任何东西.

I want to make different pressure vessels in Catia by entering their diameter and height in Excel and after clicking on a button in that excel sheet the vessel should appear in Catia. I have no problem if I already need to have an open empty part in Catia, but would be best just to have Catia Opened with nothing loaded in it.

如果我能从头开始,看看如何从Excel中访问Catia方法,我想我可以弄清楚完成血管所需的其余方法,例如脖子,帽子等.

If i have the start and see how can I access Catia Methods from Excel I think I can figure out the rest methods needed to complete the vessel, like neck, cap, etc.

谢谢.

我设法测试了一些东西,陷入了一个问题,我不知道如何在Excel vba中设置约束.我将代码从Catia vb移到了Visual Express,并设法使其在那里工作,但是在excel中,我找不到有关如何使用驱动尺寸的链接.

I managed to test some stuff, I got stuck on one problem, I don't know how to set up constraints in Excel vba. I moved the code from Catia vb to Visual Express and managed to make it work there but in excel I don't find a link on how to use a driving dimension.

这是我的代码:

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:对象不支持此属性或方法.

On that commented line I get error 438: Object doesn't support this property or method.

代码可以在没有该行的情况下工作,但是几何元素不受限制,而是显示为固定的,我不希望这样做.

The code works without that line, but the geometric elements are not constrained, instead they appear fixed and I don't want this.

该代码在Visual Express中可以正常工作,并将所有约束放在应有的位置.

That code works fine in Visual Express and put all the constraints where they should be.

谁能告诉我如何将Catia命令链接到excel vb.

Can anyone tell me how to link that Catia command to excel vb.

这是来自v5自动化文档:

This is from v5 automation documentation:

枚举CatConstraintMode { catCstModeDrivingDimension, catCstModeDrivenDimension }

enum CatConstraintMode { catCstModeDrivingDimension, catCstModeDrivenDimension }

对我的代码的任何反馈也表示赞赏.

Also any feedback on my code is appreciated.

谢谢.

excel工作表

我似乎只允许导入这些参考: 引用

The only references I seem to be allowed to import are these: references

如果选择其他,则会收到错误消息:加载DLL时出错. Catia已安装在服务器上,但我可以使用浏览"来指向它.由于文件很多,我仍然不确定在那儿选择什么.

If I select others I receive an error: Error in loading DLL. Catia is installed on a server but I can point to it using Browse... still I'm not sure what to select there because there are a lot of files.

推荐答案

下面是创建螺栓的代码.将代码粘贴到Excel中的模块中,然后为宏分配一个按钮.

Here is a code to create a bolt. Paste the code in a module in Excel and assign a button to the macro.

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

这篇关于通过单击Excel按钮在Catia中设计零件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆