CATIA二次开发VBA入门(5)——catia文档操作vb.net程序案例,打开catia文件,进行视图操作,退出程序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

目录

  • 引出
  • catia文档操作案例
    • 1.初始化窗体,始终置顶
      • 始终置顶方式2
    • 2.打开文件
    • 3.视图切换
    • 4.退出
    • 5.完整代码
  • 总结
  • 认识CATIA二次开发
    • 刘瑞欣 vb程序设计教程
    • Excel中的vba开发
    • catia中的vba开发
  • 宏的录制、回放和编辑
    • 宏代码精简
    • 画圆柱阵列
    • 宏Macro文件的3种类型
      • 宏的保存:文件夹,项目,catia文件
    • 宏加入到工具条中
    • 插曲:工具条的恢复
  • 进程外开发环境搭建和案例
      • vb.net和vb6.0
    • 进程外开发环境搭建
      • vb.net开发环境搭建
        • 《CATIA二次开发技术基础》模板
      • 添加宏库引用
    • vs开发环境初步
      • vs中的立即窗口
      • 对象浏览器
    • 建立模板
    • 案例:创建一堆圆柱曲面
      • 第一步:录制宏
      • 第二步:代码精简
      • 第三步:for循环改造
      • 第四步:人机交互改造
        • 窗口模态设置
        • 导出窗口fm
      • 第五步:搭建vs的开发环境
        • 窗口布局设置
      • 第六步:改造录制的宏
      • 第七步:进行测试
      • 报错:关于非窗体转换成窗体报错Model1中找不到sub main

引出

CATIA二次开发VBA入门(5)——catia文档操作vb.net程序案例,打开catia文件,进行视图操作,退出程序


catia文档操作案例

1.初始化窗体,始终置顶

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    ' --------------------------------------------------------------' 窗口属性设定API声明' --------------------------------------------------------------Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long, ByVal y As Long,ByVal cx As Long, ByVal cy As Long,ByVal wFlags As Long) As LongPrivate Const SWP_NOMOVE = &H2Private Const SWP_NOSIZE = &H1Private Const HWND_TOPMOST = -1Private Const HWND_NOTOPMOST = -2' ***********************************************************************'   目的:      设置窗口使其始终在其它窗口上面''   输入:      iHwnd:    要设置的窗口句柄'               bOnTop:   设置或取消窗口的置顶属性'                         可选,默认为真' ***********************************************************************Sub MakeMeOnTop(iHwnd As Long, Optional bOnTop As Boolean = True)If bOnTop ThenSetWindowPos(iHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)ElseSetWindowPos(iHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)End IfEnd Sub

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

始终置顶方式2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.打开文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在较旧版本的Visual Basic中,如VB6及其之前的版本,CommonDialog 控件用于提供一个通用的对话框界面,可以用于打开文件、保存文件、选择颜色或打印文档等功能。用户可以通过在工具箱中添加 CommonDialog 控件到窗体上,然后在代码中设置其属性和调用其方法来使用这些标准对话框。

以下是使用 CommonDialog 控件的一个简单例子:

vb
' 设置对话框的操作为打开文件
CommonDialog1.Action = vbCommonDialogOpenFile' 显示打开文件对话框
CommonDialog1.ShowOpen' 使用用户选择的文件名
If CommonDialog1.FileName <> "" ThenMsgBox "您选择的文件是:" & CommonDialog1.FileName
End If

然而,在.NET环境中(比如VB.NET),CommonDialog 控件已经被不同的专用对话框控件所替代,例如:

  • OpenFileDialog - 打开文件对话框
  • SaveFileDialog - 保存文件对话框
  • ColorDialog - 颜色选择对话框
  • FontDialog - 字体选择对话框
  • PrintDialog - 打印对话框

在VB.NET中使用这些对话框通常更简单、更直接,不需要设置 Action 属性,只需要创建对话框的实例,设置所需的属性,并调用 ShowDialog 方法即可。例如,使用 OpenFileDialog 的代码如下:

' 创建打开文件对话框的实例
Dim openFileDialog As New OpenFileDialog()' 配置对话框的属性
openFileDialog.Title = "选择文件"
openFileDialog.Filter = "所有文件 (*.*)|*.*"' 显示对话框并检查对话框结果
If openFileDialog.ShowDialog() = DialogResult.OK Then' 获取用户选择的文件名MessageBox.Show("您选择的文件是:" & openFileDialog.FileName)
End If

使用这种方式,你可以为你的VB.NET应用程序提供一个现代化和一致的对话框体验。

3.视图切换

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.退出

在Visual Basic 6.0及其之前的版本中,Unload Me 是一条常用的语句,用于从内存中卸载当前窗体。然而,在Visual Basic .NET(VB.NET)中,这个语句不再适用,因为VB.NET采用了不同的窗体管理和内存管理机制。

在VB.NET中,要关闭当前窗体,你应该使用 Me.Close() 方法。这个方法会关闭窗体并释放其占用的资源。例如:

' 关闭当前窗体
Me.Close()

Me.Close() 方法会触发窗体的 FormClosedFormClosing 事件,你可以在这些事件中执行任何必要的清理工作。

如果你想要从内存中完全移除窗体,以便它不再可用,并且可以被垃圾回收器回收,你可以在窗体的 FormClosed 事件中设置窗体变量为 Nothing

Private Sub YourForm_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed' 设置窗体变量为 Nothing,以便它可以被垃圾回收YourForm = Nothing
End Sub

请注意,在VB.NET中,窗体通常是按需加载的,这意味着只有当窗体被显示时,它才会被加载到内存中。当窗体被关闭时,它通常会被卸载,除非有其他代码或事件保持对它的引用。因此,在大多数情况下,你不需要手动卸载窗体,Me.Close() 就足够了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.完整代码

model

Imports MECMOD
Imports PARTITF
Imports HybridShapeTypeLibModule Module1Public CATIA As INFITF.ApplicationPublic oPartDoc As PartDocumentPublic oPart As PartPublic oBodies As BodiesPublic oBody As BodyPublic oHBodies As HybridBodiesPublic oHBody As HybridBodyPublic oSF As ShapeFactoryPublic oHSF As HybridShapeFactory' ***********************************************************************'   目的:      初始化CATIA产品文档,并初始化必要的基本变量''   输入:      bNewProduct:   初始化时是否新建产品文件'                              可选,默认新建文件'               strProduct:    初始化时是否打开已经存在的产品文件'                              可选,默认新建文件' ***********************************************************************Sub InitCATIAPart(Optional ByVal bNewPart As Boolean = True,Optional ByVal strPart As String = "")On Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfIf bNewPart ThenoPartDoc = CATIA.Documents.Add("Part")ElseIf strPart = "" ThenoPartDoc = CATIA.ActiveDocumentIf oPartDoc Is Nothing ThenErr.Clear()oPartDoc = CATIA.Documents.Add("Part")End IfElseIf Dir(strPart) <> "" ThenoPartDoc = CATIA.Documents.Open(strPart)ElseMsgBox("指定的文件不存在!")EndEnd IfEnd IfEnd IfOn Error GoTo 0oPartDoc = CATIA.ActiveDocumentoPart = oPartDoc.PartoBodies = oPart.BodiesoBody = oBodies.Item(1)oHBodies = oPart.HybridBodiesoHBody = oHBodies.Add()oSF = oPart.ShapeFactoryoHSF = oPart.HybridShapeFactoryEnd Sub' --------------------------------------------------------------' 窗口属性设定API声明' --------------------------------------------------------------Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long, ByVal y As Long,ByVal cx As Long, ByVal cy As Long,ByVal wFlags As Long) As LongPrivate Const SWP_NOMOVE = &H2Private Const SWP_NOSIZE = &H1Private Const HWND_TOPMOST = -1Private Const HWND_NOTOPMOST = -2' ***********************************************************************'   目的:      设置窗口使其始终在其它窗口上面''   输入:      iHwnd:    要设置的窗口句柄'               bOnTop:   设置或取消窗口的置顶属性'                         可选,默认为真' ***********************************************************************Sub MakeMeOnTop(iHwnd As Long, Optional bOnTop As Boolean = True)If bOnTop ThenSetWindowPos(iHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)ElseSetWindowPos(iHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE)End IfEnd SubEnd Module

form1

Imports MECMOD
Imports HybridShapeTypeLib
Imports INFITFPublic Class Form1' 窗体初始化的函数Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.LoadOn Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfOn Error GoTo 0' 让catia始终在最上层MakeMeOnTop(Me.Handle, True)End SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickOn Error Resume NextDim openD As New OpenFileDialog()openD.Filter = "零件文件|*.CATpart"Dim opartdoc As PartDocument = CATIA.ActiveDocumentIf openD.ShowDialog = DialogResult.OK And openD.FileName <> "" ThenConsole.WriteLine(openD.FileName)MsgBox(openD.FileName)opartdoc = CATIA.Documents.Open(openD.FileName)End IfOn Error GoTo 0End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click' 当前活动视图Dim myViewer As Viewer3DmyViewer = CATIA.ActiveWindow.ActiveViewermyViewer.RenderingMode = CatRenderingMode.catRenderShadingDim myCams = CATIA.ActiveDocument.CamerasDim myCam As Camera3DConsole.WriteLine(myCams.Count)For i = 1 To myCams.Count - 1myCam = myCams(i)MsgBox(myCam.Name)' 改变当前的活动视图myViewer.Viewpoint3D = myCam.Viewpoint3DmyViewer.Reframe()myViewer.ZoomIn()myViewer.Update()NextEnd SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.ClickMe.Close()End Sub
End Class

总结

CATIA二次开发VBA入门(5)——catia文档操作vb.net程序案例,打开catia文件,进行视图操作,退出程序


其他内容

认识CATIA二次开发

V5 AUTOMATION开发

刘瑞欣 vb程序设计教程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Excel中的vba开发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

catia中的vba开发

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏的录制、回放和编辑

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏代码精简

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

录制到项目中,录制成一个模块

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

catia的vba开发环境设置,取消dim的限值,这样就可以不用定义变量,便于简化录制的宏程序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sub CATMain()Set partDocument2 = CATIA.Documents.Add("Part")Set part2 = partDocument2.PartSet body1 = part2.Bodies.Item("零件几何体")Set sketches1 = body1.SketchesSet originElements1 = part2.OriginElementsSet reference1 = originElements1.PlaneYZSet sketch1 = sketches1.Add(reference1)part2.InWorkObject = sketch1Set factory2D1 = sketch1.OpenEdition()Set circle2D1 = factory2D1.CreateClosedCircle(0#, 0#, 20)sketch1.CloseEditionpart2.InWorkObject = sketch1Set hybridShapeFactory1 = part2.HybridShapeFactorySet hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)Set reference2 = part2.CreateReferenceFromObject(sketch1)Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference2, 60#, 60#, hybridShapeDirection1)hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1part2.InWorkObject = hybridShapeExtrude1part2.UpdateEnd Sub

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

画圆柱阵列

Sub CATMain()Set partDocument2 = CATIA.Documents.Add("Part")Set part2 = partDocument2.PartSet body1 = part2.Bodies.Item("零件几何体")Set sketches1 = body1.SketchesSet originElements1 = part2.OriginElementsSet reference1 = originElements1.PlaneYZSet sketch1 = sketches1.Add(reference1)part2.InWorkObject = sketch1Set factory2D1 = sketch1.OpenEdition()
'--------------------------------------------For i = 0 To 99Set circle2D1 = factory2D1.CreateClosedCircle(50 * i, 0#, 20)Next'--------------------------------------------
sketch1.CloseEditionpart2.InWorkObject = sketch1Set hybridShapeFactory1 = part2.HybridShapeFactorySet hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)Set reference2 = part2.CreateReferenceFromObject(sketch1)Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference2, 60#, 60#, hybridShapeDirection1)hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1part2.InWorkObject = hybridShapeExtrude1part2.UpdateEnd Sub

每次画完都自动更新,这样能实时看到caita的变化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏Macro文件的3种类型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏的保存:文件夹,项目,catia文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

保存到文件中的两种后缀格式,catiaScript和vbScript,即catia脚本和vb脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

catvba模式的导出

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏的默认编辑器设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

宏加入到工具条中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

选择catiavba项目作为当前的宏库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

工具,自定义选项卡

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以设置图标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按住,拖到工具条中

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式一:工具条中,点击图标运行,显示弹窗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方式二:作为catia脚本,直接双击运行

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

插曲:工具条的恢复

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进程外开发环境搭建和案例

vb.net和vb6.0

在这里插入图片描述

VB.NET一种简单,现代,面向对象计算机编程语言,有微软开发,VB.NET是一种基于.NET Framework的面向对象编程语言,它是Visual Basic语言的继承者,但是与早期版本的Visual Basic有很大的不同。VB.NET是一种强类型语言,支持类、接口委托、异常处理、LINQ等现代编程特性,可以开发Windows应用程序、Web应用程序、服务和组价。它还支持多线程和异步编程,并且可以与其他的.NET语言(如C#)进行交互。VB.NET是一种易学易用的语言,适合初学者和专业开发人员

特点:

1.面向对象:VB.NET 是一种完全面向对象的语言,支持封装、继承和多态等面向对象的特性。

2.强类型:VB.NET 是一种强类型语言,需要在编译时进行类型检查,避免在运行时出现类型错误。

3.安全性:VB.NET 具有良好的安全性,支持代码访问权限控制、类型安全、内存管理等功能,可以有效地防止程序运行时出现安全问题。

4.可扩展性:VB.NET 可以轻松地扩展和定制,可以使用 COM 组件、.NET 组件和自定义组件等方式扩展应用程序的功能。

5.多平台支持:VB.NET 可以运行在多个操作系统上,包括 Windows、Linux 和 macOS 等。

6.集成开发环境:VB.NET 可以与 Visual Studio 集成使用,提供了丰富的开发工具和调试功能,可以提高开发效率和代码质量。

7.数据库支持:VB.NET 提供了对多种数据库的支持,包括 ADO.NET、OLE DB 和 ODBC 等,可以方便地访问和操作数据库

VB.NET和VB6.两种不同的Visual Basic版本,它们在语言、架构、开发环境、应用场景等方面都有很大的差异。

不同之处
类型语言架构开发环境应用场景编译器文件格式
VB.NET完全面向对象语言支持更多语言:泛型,LINNQ,匿名来类型.NET Framework支持更多.NET Framework特性:Windows Forms,WPF,ASP.NETVisual Studio构建大型的企业级应用用程序.NETVB或VB.ET
VB6.0基于事件语言COM集成开发环境(IDE)小型的应用程序和系统内的维护和升级Microsoft Vissual Basic 6.0.frm、.cls.bas等

进程外开发环境搭建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vb.net开发环境搭建

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 新建模块

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建了窗口和模块

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

《CATIA二次开发技术基础》模板

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Imports INFITFModule Module1Public CATIA As INFITF.ApplicationPublic Sub Main()On Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfOn Error GoTo 0End SubEnd Module

在这里插入图片描述

添加宏库引用

catia自带的vba开发环境已经引用了很多库

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

需要在vb中引入import

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

vs开发环境初步

vs中的立即窗口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Imports MECMODModule Module1Public CATIA As INFITF.ApplicationPublic oPartDoc As PartDocumentSub Main()On Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfOn Error GoTo 0oPartDoc = CATIA.ActiveDocumentMsgBox(oPartDoc.Name)End SubEnd Module

对象浏览器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Imports MECMODModule Module1Public CATIA As INFITF.ApplicationPublic oPartDoc As PartDocumentPublic oPart As PartPublic oBodies As BodiesPublic oBody As BodySub Main()On Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfOn Error GoTo 0oPartDoc = CATIA.ActiveDocument'MsgBox(oPartDoc.Name)oPart = oPartDoc.PartoBodies = oPart.BodiesoBody = oBodies.Item(1)MsgBox(oBody.Name)End SubEnd Module

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

建立模板

可以把设置好库函数的引用的工程文件,作为一个标准的模板,后面直接复制这个标准模板,然后在这上面开发,就不需要每次都要创建各种引用了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例:创建一堆圆柱曲面

先创建一个宏库,用于保存接下来要录制的宏程序

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第一步:录制宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后,工具,宏,启动录制,新建一个part,草图编辑,然后拉升,获得一个圆柱

编辑录制的宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sub CATMain()Dim documents1 As Documents
Set documents1 = CATIA.DocumentsDim partDocument1 As PartDocument
Set partDocument1 = documents1.Add("Part")Dim part1 As Part
Set part1 = partDocument1.PartDim bodies1 As Bodies
Set bodies1 = part1.BodiesDim body1 As Body
Set body1 = bodies1.Item("零件几何体")Dim sketches1 As Sketches
Set sketches1 = body1.SketchesDim originElements1 As OriginElements
Set originElements1 = part1.OriginElementsDim reference1 As Reference
Set reference1 = originElements1.PlaneXYDim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)Dim arrayOfVariantOfDouble1(8)
arrayOfVariantOfDouble1(0) = 0#
arrayOfVariantOfDouble1(1) = 0#
arrayOfVariantOfDouble1(2) = 0#
arrayOfVariantOfDouble1(3) = 1#
arrayOfVariantOfDouble1(4) = 0#
arrayOfVariantOfDouble1(5) = 0#
arrayOfVariantOfDouble1(6) = 0#
arrayOfVariantOfDouble1(7) = 1#
arrayOfVariantOfDouble1(8) = 0#
Set sketch1Variant = sketch1
sketch1Variant.SetAbsoluteAxisData arrayOfVariantOfDouble1part1.InWorkObject = sketch1Dim factory2D1 As Factory2D
Set factory2D1 = sketch1.OpenEdition()Dim geometricElements1 As GeometricElements
Set geometricElements1 = sketch1.GeometricElementsDim axis2D1 As Axis2D
Set axis2D1 = geometricElements1.Item("绝对轴")Dim line2D1 As Line2D
Set line2D1 = axis2D1.GetItem("横向")line2D1.ReportName = 1Dim line2D2 As Line2D
Set line2D2 = axis2D1.GetItem("纵向")line2D2.ReportName = 2Dim circle2D1 As Circle2D
Set circle2D1 = factory2D1.CreateClosedCircle(0#, 0#, 25#)circle2D1.ReportName = 3Dim constraints1 As Constraints
Set constraints1 = sketch1.ConstraintsDim reference2 As Reference
Set reference2 = part1.CreateReferenceFromObject(circle2D1)Dim constraint1 As Constraint
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)constraint1.Mode = catCstModeDrivingDimensionDim length1 As Length
Set length1 = constraint1.Dimensionlength1.Value = 25#sketch1.CloseEditionpart1.InWorkObject = sketch1part1.UpdateObject sketch1Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactoryDim hybridShapeDirection1 As HybridShapeDirection
Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)Dim reference3 As Reference
Set reference3 = part1.CreateReferenceFromObject(sketch1)Dim hybridShapeExtrude1 As HybridShapeExtrude
Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference3, 20#, 0#, hybridShapeDirection1)hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1part1.InWorkObject = hybridShapeExtrude1part1.UpdateEnd Sub

第二步:代码精简

代码精简

Sub CATMain()Set documents1 = CATIA.Documents
Set partDocument1 = documents1.Add("Part")
Set part1 = partDocument1.Part
Set bodies1 = part1.Bodies
Set body1 = bodies1.Item("零件几何体")
Set sketches1 = body1.Sketches
Set originElements1 = part1.OriginElements
Set reference1 = originElements1.PlaneXY
Set sketch1 = sketches1.Add(reference1)Set factory2D1 = sketch1.OpenEdition()
Set circle2D1 = factory2D1.CreateClosedCircle(0#, 0#, 5#)
Set constraints1 = sketch1.Constraints
Set reference2 = part1.CreateReferenceFromObject(circle2D1)
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)Set length1 = constraint1.Dimension
length1.Value = 5#
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.UpdateSet hybridShapeFactory1 = part1.HybridShapeFactory
Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)
Set reference3 = part1.CreateReferenceFromObject(sketch1)
Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference3, 20#, 0#, hybridShapeDirection1)
'hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1
part1.InWorkObject = hybridShapeExtrude1  '需要加上,不然不会自动更新
part1.UpdateEnd Sub

第三步:for循环改造

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

for循环改造

Sub CATMain()Set documents1 = CATIA.Documents
Set partDocument1 = documents1.Add("Part")
Set part1 = partDocument1.Part
Set bodies1 = part1.Bodies
Set body1 = bodies1.Item("零件几何体")X = 0
For i = 1 To 5Set sketches1 = body1.Sketches
Set originElements1 = part1.OriginElements
Set reference1 = originElements1.PlaneXY
Set sketch1 = sketches1.Add(reference1)
Set factory2D1 = sketch1.OpenEdition()Set circle2D1 = factory2D1.CreateClosedCircle(X, 0#, 5#)Set constraints1 = sketch1.Constraints
Set reference2 = part1.CreateReferenceFromObject(circle2D1)
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)Set length1 = constraint1.Dimension
length1.Value = 5#
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.UpdateSet hybridShapeFactory1 = part1.HybridShapeFactory
Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)
Set reference3 = part1.CreateReferenceFromObject(sketch1)
Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference3, 20#, 0#, hybridShapeDirection1)
'hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1
part1.InWorkObject = hybridShapeExtrude1  '需要加上,不然不会自动更新
part1.UpdateX = X + 20
Next
part1.UpdateEnd Sub

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第四步:人机交互改造

顶部对齐

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

Private Sub CommandButton1_Click()Set documents1 = CATIA.Documents
Set partDocument1 = documents1.Add("Part")
Set part1 = partDocument1.Part
Set bodies1 = part1.Bodies
Set body1 = bodies1.Item("零件几何体")X = 0
For i = 1 To TextBox1.ValueSet sketches1 = body1.Sketches
Set originElements1 = part1.OriginElements
Set reference1 = originElements1.PlaneXY
Set sketch1 = sketches1.Add(reference1)
Set factory2D1 = sketch1.OpenEdition()Set circle2D1 = factory2D1.CreateClosedCircle(X, 0#, 5#)Set constraints1 = sketch1.Constraints
Set reference2 = part1.CreateReferenceFromObject(circle2D1)
Set constraint1 = constraints1.AddMonoEltCst(catCstTypeRadius, reference2)Set length1 = constraint1.Dimension
length1.Value = 5#
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.UpdateSet hybridShapeFactory1 = part1.HybridShapeFactory
Set hybridShapeDirection1 = hybridShapeFactory1.AddNewDirectionByCoord(0#, 0#, 0#)
Set reference3 = part1.CreateReferenceFromObject(sketch1)
Set hybridShapeExtrude1 = hybridShapeFactory1.AddNewExtrude(reference3, 20#, 0#, hybridShapeDirection1)
'hybridShapeExtrude1.SymmetricalExtension = 0body1.InsertHybridShape hybridShapeExtrude1
part1.InWorkObject = hybridShapeExtrude1  '需要加上,不然不会自动更新
part1.UpdateX = X + TextBox2.Value
Next
part1.UpdateEnd Sub
窗口模态设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

导出窗口fm

这里本来想导出vba中创建的窗口,然后在vb.net中导入,直接使用,但是两个版本的vb差别较大,并没有成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加现有项失败,可能是版本的问题,毕竟vb是很老的,我这里用的是vs

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第五步:搭建vs的开发环境

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Imports MECMOD
Imports PARTITF
Imports HybridShapeTypeLibModule Module1Public CATIA As INFITF.ApplicationPublic oPartDoc As PartDocumentPublic oPart As PartPublic oBodies As BodiesPublic oBody As BodyPublic oHBodies As HybridBodiesPublic oHBody As HybridBodyPublic oSF As ShapeFactoryPublic oHSF As HybridShapeFactory' ***********************************************************************'   目的:      初始化CATIA产品文档,并初始化必要的基本变量''   输入:      bNewProduct:   初始化时是否新建产品文件'                              可选,默认新建文件'               strProduct:    初始化时是否打开已经存在的产品文件'                              可选,默认新建文件' ***********************************************************************Sub InitCATIAPart(Optional ByVal bNewPart As Boolean = True,Optional ByVal strPart As String = "")On Error Resume Next '有错误的话会忽略,继续执行下一句 ' 如果打开catia,就获取当前的这个CATIA = GetObject(, "CATIA.Application")If Err.Number <> 0 Then' 如果没有打开catia,则打开新的catiaCATIA = CreateObject("CATIA.Application")CATIA.Visible = TrueEnd IfIf bNewPart ThenoPartDoc = CATIA.Documents.Add("Part")ElseIf strPart = "" ThenoPartDoc = CATIA.ActiveDocumentIf oPartDoc Is Nothing ThenErr.Clear()oPartDoc = CATIA.Documents.Add("Part")End IfElseIf Dir(strPart) <> "" ThenoPartDoc = CATIA.Documents.Open(strPart)ElseMsgBox("指定的文件不存在!")EndEnd IfEnd IfEnd IfOn Error GoTo 0oPartDoc = CATIA.ActiveDocumentoPart = oPartDoc.PartoBodies = oPart.BodiesoBody = oBodies.Item(1)oHBodies = oPart.HybridBodiesoHBody = oHBodies.Add()oSF = oPart.ShapeFactoryoHSF = oPart.HybridShapeFactoryEnd Sub
End Module
窗口布局设置

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第六步:改造录制的宏

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Imports MECMOD
Imports HybridShapeTypeLib
Imports INFITFPublic Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickInitCATIAPart(True) 'true表示新建一个partDim XDis As Integer = 0For iCount = 1 To Val(TextBox1.Text)Dim sketches1 As Sketches = oBody.SketchesDim originElements1 As OriginElements = oPart.OriginElementsDim reference1 As Reference = originElements1.PlaneXYDim sketch1 As Sketch = sketches1.Add(reference1)Dim factory2D1 As Factory2D = sketch1.OpenEdition()Dim circle2D1 As Circle2D = factory2D1.CreateClosedCircle(XDis, 0#, 5.0#)Dim constraints1 As Constraints = sketch1.ConstraintsDim reference2 As Reference = oPart.CreateReferenceFromObject(circle2D1)Dim constraint1 = constraints1.AddMonoEltCst(CatConstraintType.catCstTypeRadius, reference2)Dim length1 = constraint1.Dimensionlength1.Value = 5.0#sketch1.CloseEdition()oPart.InWorkObject = sketch1oPart.Update()Dim hybridShapeDirection1 As HybridShapeDirection = oHSF.AddNewDirectionByCoord(0#, 0#, 0#)Dim reference3 As Reference = oPart.CreateReferenceFromObject(sketch1)Dim hybridShapeExtrude1 = oHSF.AddNewExtrude(reference3, 20.0#, 0#, hybridShapeDirection1)'hybridShapeExtrude1.SymmetricalExtension = 0oBody.InsertHybridShape(hybridShapeExtrude1)oPart.InWorkObject = hybridShapeExtrude1  '需要加上,不然不会自动更新oPart.Update()XDis = XDis + Val(TextBox2.Text)NextoPart.Update()End Sub
End Class

第七步:进行测试

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

报错:关于非窗体转换成窗体报错Model1中找不到sub main

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时&#xff0c;您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您&#xff0c;并被用来了解您的位置。下面的文章将教您如何隐藏自己&#xff0c;不让任何试图跟踪您的活动的人发现。 什么是 IP 地址&#xff1f; 首先&am…

Apache Flink核心特性应用场景

Flink的定义 Apache Flink是一个分布式处理引擎&#xff0c;用于处理 无边界数据流&#xff0c; 有边界数据流上金秀贤有状态的计算。Flink能在所有常见的集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算如下Flink官网的一张图 Flink 与Spark的区别 Flink 中处…

白盒测试的概念、特点、应用阶段、实施流程、现状与前景

文章目录 前言一、白盒测试的应用阶段二、白盒测试的特点三、白盒测试的流程四、白盒测试的现状与前景总结 前言 白盒测试&#xff08;White Box Testing&#xff09;&#xff0c;又称为结构测试&#xff08;Structural Testing&#xff09;、透明盒测试&#xff08;Glass Box…

Riscv 调试系统的合规测试

Riscv debug release框图 仿真环境下的Riscv debug框图 平头哥调试环境 XuanTie DebugServer是一个调试代理软件&#xff0c;它通过CKLINK&#xff0c;以JTAG的方式连接目标板&#xff0c;并支持“GDB Remote Protocol” 。开发者可以通过GDB对运行在玄铁800系列和玄铁900系列处…

24.可乐机拓展练习--综合训练

&#xff08;1&#xff09;设计要求&#xff1a;仍以可乐机为背景&#xff0c;一瓶可乐的价格是2.5 元&#xff0c;用按键控制投币&#xff08;加入按键消抖功能&#xff09;&#xff0c;可以投 0.5 元硬币和 1元硬币&#xff0c;投入 0.5 元后亮一个灯&#xff0c;投入 1元后亮…

从微软 Word 中提取数据

从 Microsoft Word 文档中提取数据可以通过编程来实现&#xff0c;有几种常见的方法&#xff0c;其中之一是使用 Python 和 python-docx 库。python-docx 是一个处理 .docx 文件&#xff08;Microsoft Word 文档&#xff09;的 Python 库&#xff0c;可以读取和操作 Word 文档的…

语雀平替,一款私有化功能丰富的开源知识库系统

背景介绍 现代企业面临的文档管理挑战日益严峻&#xff0c;包括信息冗余&#xff0c;存在多份数据&#xff0c;难以做到统一 &#xff0c;文档数量激增&#xff0c;查找麻烦&#xff0c;知识的信息安全问题频发以及团队协作需求不断上升。同时&#xff0c;随着知识管理在企业运…

文章SameStr(二):图2代码

title: “Publication Figure 2” 百度云盘链接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取码: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special library(lme4) library(sjPlot) library(sjst…

基于Java中的SSM框架实现学生网上请假系统项目【项目源码+论文说明】计算机毕业设计

摘要 本学生网上请假系统是针对目前学生网上请假系统的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的学生网上请假系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用目前最流…

数据结构与算法:顺序表和链表

目录 一、线性表 二、顺序表 三、链表 一、线性表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线…

MyBatis框架学习笔记(一):MyBatis入门

1 MyBatis 介绍 1.1 官方文档 MyBatis 中文手册&#xff1a; &#xff08;1&#xff09;https://mybatis.org/mybatis-3/zh/index.html &#xff08;2&#xff09;https://mybatis.net.cn/ Maven 仓库&#xff1a; https://mvnrepository.com/ 仓库作用&#xff1a;需要…

(三)前端javascript中的数据结构之集合

集合的特点 1.无序 2.唯一性 3.不可重复 集合相对于前面几种数据结构&#xff0c;比较简单好理解&#xff0c;看看代码实现就能知道他的用法了 集合的创建 function MySet() {this.item {}; } MySet.prototype.has function (value) {return value in this.item; };//增 M…

编程范式之函数式编程

目录 前言1. 函数式编程的定义2. 函数式编程的特点2.1 纯函数2.2 不可变性2.3 高阶函数2.4 惰性求值 3. 函数式编程的应用场景3.1 并行计算3.2 数据分析3.3 Web开发 4. 函数式编程的优缺点4.1 优点4.2 缺点 5. 代表性的编程语言5.1 Haskell5.2 Scala5.3 Clojure 6. 示例代码结语…

HTML5新增的input元素属性:placeholder、required、autofocus、min、max等

HTML5 大幅度地增加与改良了 input 元素的属性&#xff0c;可以简单地使用这些属性来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 下面将详细介绍这些新增的 input 元素的属性。 属性说明属性说明placeholder在输入框显示描述性或提示性文本list为文本框添加选…

React+TS前台项目实战(二十七)-- 首页响应式构建之banner、搜索、统计模块布局

文章目录 前言一、 效果展示二、相关模块1. Statistic统计模块功能分析代码详细注释使用方式 2. Search搜索模块功能分析代码详细注释使用方式 3. banner模块功能分析代码详细注释使用方式 总结 前言 前面我们已经封装了这个项目基本要用到的全局组件了&#xff0c;现在就开始…

ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.04615.pdf 信息图表&#xff08;图表、示意图、插图、地图、表格、文档布局等&#xff09;能够将复杂的数据和想法转化为简单的视觉效果&#xff0c;因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线…

普通人必看!AI绘画商业变现全攻略(附教程)

大部分的设计师除了主业以外&#xff0c;都会利用空余时间去接单做副业。 单子包括但不限于产品/品牌LOGO、电商产品图设计、海报、室内设计图等等&#xff0c;单价在几十到上千不等 引起了我的思考&#xff0c;我们普通人有没有机会&#xff0c;也能像他们一样去接单赚钱吗&a…

pytorch- RNN循环神经网络

目录 1. why RNN2. RNN3. pytorch RNN layer3.1 基本单元3.2 nn.RNN3.2.1 函数说明3.2.2 单层pytorch实现3.2.3 多层pytorch实现 3.3 nn.RNNCell3.3.1 函数说明3.3.2 单层pytorch实现3.3.3 多层pytorch实现 4.完整代码 1. why RNN 以淘宝的评论为例&#xff0c;判断评论是正面…

matplotlib颜色对照表

matplotlib的色彩设置: #------------------------------------------------------------------------------------------------------------------------------- #-------------------------------------------------------------------------------------------------------…

【JavaWeb】登录校验-会话技术(二)JWT令牌

JWT令牌 介绍 JWT全称&#xff1a;JSON Web Token &#xff08;官网&#xff1a;https://jwt.io/&#xff09; 定义了一种简洁的、自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在&#xff0c;这些信息是可靠的。 简洁&#xff1a…