我尝试了从草图中的点制作轴的代码

问题描述 投票:0回答:1

在 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 失败。我也应该循环引用吗?我也尝试过引用,但可能是语法错误?我不知道。它只是给出错误。

我是编码新手。也许我会对这种情况的循环有所了解。我尝试了详细部分中的代码。

vbscript catia
1个回答
0
投票

基于草图始终具有相同名称、点数已知且草图仅包含点的假设,应如下构建循环:

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 字符串中有一个额外的空格

© www.soinside.com 2019 - 2024. All rights reserved.