在CATIA VBA开发中,Document对象是最核心、最基础的对象之一。它代表了当前在CATIA会话中打开的一个文档(文件)。
几乎所有与文件操作、模型访问相关的操作都始于获取一个Document对象。Document对象包含多种方法和属性,以下介绍Document对象方法和属性
分类 | 方法 | 功能描述 | 适用文档类型 | 示例代码 |
---|---|---|---|---|
文档激活控制 | Activate | 激活文档使其成为当前活动文档 | 所有文档类型 | targetDoc.Activate |
NewWindow | 为文档创建新窗口 | 所有文档类型 | doc.NewWindow | |
文档生命周期 | Close | 关闭文档 | 所有文档类型 | doc.Close catSaveChanges |
Save | 保存文档 | 所有文档类型 | If Not doc.Saved Then doc.Save | |
SaveAs | 文档另存为 | 所有文档类型 | doc.SaveAs “C:\NewName.CATPart” | |
数据交换 | ExportData | 导出文档为其他格式 | 所有文档类型 | doc.ExportData “C:\export.stp”, “stp” |
交互选择 | Indicate2D | 在2D环境(工程图)中交互选择元素 | DrawingDocument | Set elem = doc.Indicate2D(“选择元素”, catSelectionFilterDimension) |
Indicate3D | 在3D环境(零件/装配)中交互选择元素 | PartDocument ProductDocument |
Set face = doc.Indicate3D(“选择面”, catSelectionFilterFace) | |
对象引用 | CreateReferenceFromName | 通过名称创建对象引用 | 所有文档类型 | Set ref = doc.CreateReferenceFromName(“Part1\Sketch.1”) |
GetItem | 通过名称获取文档中的项目(参数、关系等) | 所有文档类型 | Set param = doc.GetItem(“LengthParam”) | |
工作环境控制 | GetWorkbench | 获取指定工作台对象 | 所有文档类型 | Set pdWB = doc.GetWorkbench(“PartDesignWorkbench”) |
选择过滤 | CreateFilter | 创建选择过滤器 | 所有文档类型 | Set filter = doc.CreateFilter(“FaceFilter”) |
RemoveFilter | 移除选择过滤器 | 所有文档类型 | doc.RemoveFilter filter |
在CATIA VBA开发中,Document.Indicate2D方法是一个专业级的交互式点选择工具,主要用于在2D环境(如草图或工程图)中精确获取用户选择的点坐标。
这个方法在需要用户交互的定制工具开发中特别有用,允许开发人员创建直观的点选择界面。
核心功能与工作流程
方法语法
Function Indicate2D(
iPrompt As String,
iX As Double,
iY As Double,
oStatus As CatCaptureStatus
) As Boolean
参数 | 类型 | 必需 | 说明 |
---|---|---|---|
Prompt | String | 是 | 用户提示信息(显示在状态栏) |
Filter | SelectionFilter | 否 | 选择过滤器对象,限制可选元素类型 |
' 创建工程图选择过滤器
Dim filter As SelectionFilter
Set filter = drawingDoc.CreateFilter("DrawingFilter")
' 添加可选择的元素类型
filter.AddElementType catDrawingView ' 工程图视图
filter.AddElementType catDrawingDimension ' 尺寸标注
filter.AddElementType catDrawingText ' 文本注解
filter.AddElementType catDrawingGeometry ' 几何元素
使用示例
1、选择工程图视图进行操作;2、选取尺寸标注进行修改;3、识别注解元素进行更新;4、选择几何元素进行分析。
场景一:基础点选择
Sub GetSketchPoint()
Dim doc As Document
Set doc = CATIA.ActiveDocument
' 仅在草图编辑模式下有效
If TypeName(doc.GetWorkbench("Sketcher")) <> "Nothing" Then
Dim x As Double, y As Double
x = 0: y = 0 ' 初始坐标
Dim status As CatCaptureStatus
Dim confirmed As Boolean
' 显示点选择提示
confirmed = doc.Indicate2D("请选择草图点", x, y, status)
If confirmed And status = catCaptureNormal Then
MsgBox "选择的点坐标: X=" & x & ", Y=" & y
Else
MsgBox "用户取消了选择"
End If
Else
MsgBox "请先进入草图编辑模式"
End If
End Sub
场景二:创建基于用户输入的几何元素
Sub CreateCircleFromPoints()
Dim doc As Document
Set doc = CATIA.ActiveDocument
Dim part As Part
Set part = doc.Part
' 获取圆心
Dim centerX As Double, centerY As Double
centerX = 0: centerY = 0
If Not doc.Indicate2D("选择圆心位置", centerX, centerY, status) Then Exit Sub
' 获取圆周点
Dim radiusX As Double, radiusY As Double
radiusX = centerX + 10: radiusY = centerY ' 默认半径点
If Not doc.Indicate2D("选择圆周点", radiusX, radiusY, status) Then Exit Sub
' 计算半径
Dim radius As Double
radius = Sqr((radiusX - centerX) ^ 2 + (radiusY - centerY) ^ 2)
' 创建圆
Dim sketch As Sketch
Set sketch = part.HybridBodies.Item(1).HybridSketches.ActiveSketch
sketch.OpenEdition
Dim factory2D As Factory2D
Set factory2D = sketch.OpenEdition
factory2D.CreateClosedCircle centerX, centerY, radius
sketch.CloseEdition
part.Update
End Sub
场景一:动态预览创建
Sub CreateLineWithPreview()
Dim doc As Document
Set doc = CATIA.ActiveDocument
Dim part As Part
Set part = doc.Part
' 起点选择
Dim startX As Double, startY As Double
startX = 0: startY = 0
If Not doc.Indicate2D("选择线段起点", startX, startY, status) Then Exit Sub
' 终点选择(带动态预览)
Dim endX As Double, endY As Double
endX = startX + 20: endY = startY + 20 ' 初始终点
' 创建临时预览对象
Dim preview As GeometricElement
Set preview = CreatePreviewLine(part, startX, startY, endX, endY)
' 交互式终点选择
Dim confirmed As Boolean
confirmed = doc.Indicate2D("选择线段终点", endX, endY, status)
' 删除预览
preview.Delete
If confirmed Then
' 创建实际线段
Dim sketch As Sketch
Set sketch = part.HybridBodies.Item(1).HybridSketches.ActiveSketch
sketch.OpenEdition
Dim factory2D As Factory2D
Set factory2D = sketch.OpenEdition
factory2D.CreateLine startX, startY, endX, endY
sketch.CloseEdition
part.Update
End If
End Sub
Function CreatePreviewLine(part As Part, x1, y1, x2, y2) As GeometricElement
Dim tempSketch As Sketch
Set tempSketch = part.HybridBodies.Add.HybridSketches.Add(part.OriginElements.PlaneXY)
tempSketch.OpenEdition
Dim factory2D As Factory2D
Set factory2D = tempSketch.OpenEdition
Set CreatePreviewLine = factory2D.CreateLine(x1, y1, x2, y2)
tempSketch.CloseEdition
End Function
场景二:工程图尺寸标注辅助
Sub AddCustomDimension()
Dim drawing As DrawingDocument
Set drawing = CATIA.ActiveDocument
' 选择第一个点
Dim x1 As Double, y1 As Double
x1 = 0: y1 = 0
If Not drawing.Indicate2D("选择第一个尺寸点", x1, y1, status) Then Exit Sub
' 选择第二个点
Dim x2 As Double, y2 As Double
x2 = x1 + 50: y2 = y1 ' 初始位置
If Not drawing.Indicate2D("选择第二个尺寸点", x2, y2, status) Then Exit Sub
' 选择尺寸线位置
Dim dimX As Double, dimY As Double
dimX = (x1 + x2) / 2: dimY = y1 - 20
If Not drawing.Indicate2D("选择尺寸线位置", dimX, dimY, status) Then Exit Sub
' 添加尺寸
Dim view As DrawingView
Set view = drawing.Sheets.ActiveSheet.Views.ActiveView
Dim dims As DrawingDimensions
Set dims = view.Dimensions
' 创建临时点对象
Dim point1 As DrawingPoint, point2 As DrawingPoint
Set point1 = view.Factory2D.CreatePoint(x1, y1)
Set point2 = view.Factory2D.CreatePoint(x2, y2)
' 添加尺寸
dims.AddLength point1, point2, dimX, dimY
' 清理临时点
point1.Delete
point2.Delete
End Sub
' 在特定文档中激活选择
Sub SelectInSpecificDoc(targetDoc As Document)
Dim activeDoc As Document
Set activeDoc = CATIA.ActiveDocument
' 切换到目标文档
targetDoc.Activate
' 执行点选择
Dim x As Double, y As Double
targetDoc.Indicate2D "在目标文档中选择点", x, y, status
' 恢复原始文档
activeDoc.Activate
End Sub
' 启用网格捕捉
Application.SettingCaptures.GridSnapMode = True
Application.SettingCaptures.GridSpacing = 5.0 ' 5mm网格
Function GetValidatedPoint(prompt As String) As Variant
Dim x As Double, y As Double
x = 0: y = 0
Dim status As CatCaptureStatus
Do
If Not CATIA.ActiveDocument.Indicate2D(prompt, x, y, status) Then
GetValidatedPoint = Array(Empty, Empty)
Exit Function
End If
' 检查点是否在有效区域内
If x >= 0 And x <= 100 And y >= 0 And y <= 100 Then
Exit Do
Else
MsgBox "点必须在0-100范围内,请重新选择"
End If
Loop
GetValidatedPoint = Array(x, y)
End Function
Sub CreatePointWithInput()
Dim x As Double, y As Double
x = 0: y = 0
Dim status As CatCaptureStatus
' 允许键盘输入坐标
Application.SettingCaptures.KeyboardInputMode = True
If CATIA.ActiveDocument.Indicate2D("输入或选择点位置", x, y, status) Then
' 创建点
Dim sketch As Sketch
Set sketch = CATIA.ActiveDocument.Pa