问题描述
我已经在宏编辑器中内置的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.
谢谢.
我似乎只允许导入这些参考:引用
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中设计零件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!