在 Catia 中,我们没有轴模式,所以我决定制作一个。
首先我针对这种情况录制宏。
其次,我在案例系统用户输入他想要的轴时进行编辑。但我认为使用案例是一个坏主意,因为如果用户想要 100 轴,我的案例就会变成 100 个案例选项。
我对catia中的循环一无所知。我尝试将 i 调到 100,但卡住了。所以我继续处理这个案子,但它变得更难了。在每种情况下我都需要一次又一次地写东西。
要使用此代码,首先在几何集中创建一个零件,创建一个具有 2 或 3 个点的草图。然后启动宏。
我是编码新手。我应该从哪里开始以及哪些编码语言适合 catia api? 我想改进catia的api?
这是我的代码:
Language="VBSCRIPT"
Sub CATMain()
Dim deger
deger = InputBox("How many axis you needed?")
Select Case deger
Case 1
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set axisSystems1 = part1.AxisSystems
Set axisSystem1 = axisSystems1.Add()
axisSystem1.OriginType = catAxisSystemOriginByPoint
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1")
Set sketches1 = hybridBody1.HybridSketches
Set sketch1 = sketches1.Item("Sketch.1")
Set reference1 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;1);None:(Limits1:();Limits2:();+1);Cf12:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR29)", sketch1)
axisSystem1.OriginPoint = reference1
axisSystem1.XAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble1(2)
arrayOfVariantOfDouble1(0) = 1.000000
arrayOfVariantOfDouble1(1) = 0.000000
arrayOfVariantOfDouble1(2) = 0.000000
axisSystem1.PutXAxis arrayOfVariantOfDouble1
axisSystem1.YAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble2(2)
arrayOfVariantOfDouble2(0) = 0.000000
arrayOfVariantOfDouble2(1) = 1.000000
arrayOfVariantOfDouble2(2) = 0.000000
axisSystem1.PutYAxis arrayOfVariantOfDouble2
axisSystem1.ZAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble3(2)
arrayOfVariantOfDouble3(0) = 0.000000
arrayOfVariantOfDouble3(1) = 0.000000
arrayOfVariantOfDouble3(2) = 1.000000
axisSystem1.PutZAxis arrayOfVariantOfDouble3
part1.UpdateObject axisSystem1
axisSystem1.IsCurrent = False
part1.Update
Set settingControllers1 = CATIA.SettingControllers
Set visualizationSettingAtt1 = settingControllers1.Item("CATVizVisualizationSettingCtrl")
visualizationSettingAtt1.SaveRepository
Case 2
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set axisSystems1 = part1.AxisSystems
Set axisSystem1 = axisSystems1.Add()
axisSystem1.OriginType = catAxisSystemOriginByPoint
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1")
Set sketches1 = hybridBody1.HybridSketches
Set sketch1 = sketches1.Item("Sketch.1")
Set reference1 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;1);None:(Limits1:();Limits2:();+1);Cf12:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR29)", sketch1)
axisSystem1.OriginPoint = reference1
axisSystem1.XAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble4(2)
arrayOfVariantOfDouble4(0) = 1.000000
arrayOfVariantOfDouble4(1) = 0.000000
arrayOfVariantOfDouble4(2) = 0.000000
axisSystem1.PutXAxis arrayOfVariantOfDouble4
axisSystem1.YAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble5(2)
arrayOfVariantOfDouble5(0) = 0.000000
arrayOfVariantOfDouble5(1) = 1.000000
arrayOfVariantOfDouble5(2) = 0.000000
axisSystem1.PutYAxis arrayOfVariantOfDouble5
axisSystem1.ZAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble6(2)
arrayOfVariantOfDouble6(0) = 0.000000
arrayOfVariantOfDouble6(1) = 0.000000
arrayOfVariantOfDouble6(2) = 1.000000
axisSystem1.PutZAxis arrayOfVariantOfDouble6
part1.UpdateObject axisSystem1
axisSystem1.IsCurrent = False
part1.Update
Set settingControllers1 = CATIA.SettingControllers
Set visualizationSettingAtt1 = settingControllers1.Item("CATVizVisualizationSettingCtrl")
visualizationSettingAtt1.SaveRepository
Set axisSystem2 = axisSystems1.Add()
axisSystem2.OriginType = catAxisSystemOriginByPoint
Set reference2 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;2);None:(Limits1:();Limits2:();+1);Cf12:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR29)", sketch1)
axisSystem2.OriginPoint = reference2
axisSystem2.XAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble7(2)
arrayOfVariantOfDouble7(0) = 1.000000
arrayOfVariantOfDouble7(1) = 0.000000
arrayOfVariantOfDouble7(2) = 0.000000
axisSystem2.PutXAxis arrayOfVariantOfDouble7
axisSystem2.YAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble8(2)
arrayOfVariantOfDouble8(0) = 0.000000
arrayOfVariantOfDouble8(1) = 1.000000
arrayOfVariantOfDouble8(2) = 0.000000
axisSystem2.PutYAxis arrayOfVariantOfDouble8
axisSystem2.ZAxisType = catAxisSystemAxisByCoordinates
Dim arrayOfVariantOfDouble9(2)
arrayOfVariantOfDouble9(0) = 0.000000
arrayOfVariantOfDouble9(1) = 0.000000
arrayOfVariantOfDouble9(2) = 1.000000
axisSystem2.PutZAxis arrayOfVariantOfDouble9
part1.UpdateObject axisSystem2
axisSystem2.IsCurrent = False
part1.Update
visualizationSettingAtt1.SaveRepository
'Case Else
'MsgBox "Max 2 axis for now."
End Select
End Sub
现在我的代码是这样的:
For i =1 To 100
Set reference1 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;i);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)
axisSystem1.OriginPoint = reference1
我现在从引用 1 中收到错误,它说方法 OriginPoint 失败。我也应该循环引用吗?我也尝试过引用,但可能是语法错误?我不知道。它只是给出错误。
我是编码新手。也许我会对这种情况的循环有所了解。我尝试了详细部分中的代码。
基于草图始终具有相同名称、点数已知且草图仅包含点的假设,应如下构建循环:
for i = 1 to 100
Set reference1 = part1.CreateReferenceFromBRepName("BorderFVertex:(BEdge:(Brp:(Sketch.1;" & CStr(i) & ");None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)
Set axisSystem1 = axisSystems1.Add()
axisSystem1.OriginType = catAxisSystemOriginByPoint
axisSystem1.OriginPoint = reference1
next
编辑:代码已更正,BREP 字符串中有一个额外的空格