首页 | 信息中心 | 技术分享 | 研发设计

CATIA VBA:面向工程师的设计效率提升利器(下篇)

2024.12.05

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图1)

在上一期中,我们了解了CATIA VBA宏,Automation帮助文档及VB.NET的开发流程。本期将带您走进「创建标题栏」实例的实际编码环节,带您一起一步步拆解整个代码开发过程。

初始化工程图变量

1. 获取窗口中的图纸对象,我们可以在「Automation」帮助中查询Drafting的Object接口:

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图2)

2. 在DrawingRoot Object中可以看到样例中也告知了如果来获取一个图纸对象:

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图3)

Visual Basic
 
Dim  iEditor As INFITF.Editor
 Dim iDrw As DRAFTINGITF.DrawingRoot
 
 Sub CUS_Initial()       '初始化变量
     iEditor = CATIA.ActiveEditor         
     iDrw = iEditor.ActiveObject
 End Sub



3. 接下来获取当前激活的图纸页大小,可参考DrawingSheets Collection Object中的结构:
CATIA VBA:面向工程师的设计效率提升利器(下篇)(图4)

Visual Basic
 
Dim  iSheets As DRAFTINGITF.DrawingSheets
 Dim iSheet As DRAFTINGITF.DrawingSheet
 
 Sub CUS_Initial()       '初始化变量
     ...
     iSheets = iDrw.Sheets
     iSheet = iSheets.ActiveSheet
 End Sub


获取激活图纸页的大小

1. 在Drawing Sheet Object接口集中提供了获取图纸页大小的方法:

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图5)


2. 点击即可跳转到该方法的详情页,展示了调用样例:

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图6)

Visual Basic
 
Dim  iW As Integer    '图纸长度
 Dim iH As Integer    '图纸宽度
 
 Sub CUS_GetPaperSize()       '获取图纸大小
     iW = iSheet.GetPaperWidth
     iH = iSheet.GetPaperHeight
 End Sub



3. 这时,可以验证一下是否获取到了当前激活图纸页正确的长宽,我们可使用VB中的Debug来进行测试:

Visual Basic
 
Sub  CUS_GetPaperSize()
     ...
     Debug.Print(iW & iH)  '可同时将两个变量打印在一行中显示
 End Sub


4. 当点击「启动」按钮后,可以看到在输出窗口中显示出print的结果,代表当前激活的图纸图幅大小为A3;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图7)


创建直线(使用直线方法来演示图框的创建)

1. 在Factory2D的接口中可以看到创建直线的方法;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图8)

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图9)


2. 从接口不难看出,直线的创建需要通过对两端点的XY坐标值定义来实现,为了后续在重复创建时获取到已创建的直线快速删除,需要对创建出的直线进行改名操作,通常,我们需要两句代码来完成直线的创建;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图10)


3. 但是我们也可以借助自定义函数,将两步变为一步,下面将介绍如何使用自定义函数,快速创建直线;

4. 在创建函数前,先添加一个引用「CATIA CATSketcherlDLItf Object Library」,添加这条库引用「Imports MECMOD」;

5. 先将“Factory2D”变量定义出来;

6. 这里要注意一点,我们将在背景视图中创建图框标题栏,所以iView对象要获取背景视图,背景视图为iViews的第二个item对象;


Visual Basic
 
Dim  iViews As DRAFTINGITF.DrawingViews
 Dim iView As DRAFTINGITF.DrawingView
 Dim iActiveView As DRAFTINGITF.DrawingView
 Dim iF2D As MECMOD.Factory2D
 
 Sub CUS_Initial()       '初始化变量
     ...
     iViews = iSheet.Views
     iView = iViews.Item(2)    '获取背景视图
     iF2D = iView.Factory2D
 End Sub



7. 下面开始写自定义函数;

Visual Basic
 
Function  CUS_CreateLine2D(ByRef iX1 As Double, ByRef iY1 As Double, ByRef iX2 As Double,  ByRef iY2 As Double, ByRef iName As String) As MECMOD.Curve2D
     CUS_CreateLine2D =  iF2D.CreateLine(iX1, iY1, iX2, iY2)
     CUS_CreateLine2D.Name = iName
 End Function



8. 自定义函数创建完毕,在开始绘制直线前,我们要了解到一个准则:在一个视图中创建草图对象(直线),我们需要先激活视图,创建完毕后,可再回到工作视图中,因此我们可构建一个创建标题栏的总过程;

Visual Basic
 
Sub  CUS_CreateFrame()
     iActiveView = iViews.ActiveView
     iView.Activate()    '激活背景视图
    
     iActiveView.Activate()    '激活保存的激活视图
 End Sub



9. 并且,在运行命令时,可能已存在了创建的标题栏,则此时需要先删除历史的标题栏,再重新创建,意味着我们需要搜索到全部的标题栏元素,可借助Selection中的Search方法;

10. 这样也需要将所有的标题栏元素给定一套统一的命令规则,例如每个元素的名称前缀都带有:“CUS_”关键字,可通过此关键字定位搜索;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图11)

Visual Basic
 
Dim  iSlct As INFITF.Selection
 
 Sub CUS_Initial()       '初始化变量
     ...
     iSlct = iEditor.Selection
 End Sub
 
 Sub CUS_DeleteFrame()
     '做防错处理,当第一次创建时,是没有对象搜索到的
     On Error Resume Next
     iSlct.Add(iSheet)
      iSlct.Search("Name=CUS_*,sel")    '这里只删除当前激活的sheet页内容
     If Err.Number <> 0 Then
         Exit Sub
     End If
     iSlct.Delete()
     iDrw.Update()
     On Error GoTo 0
 End Sub
 
 Sub CUS_CreateFrame()
     CUS_DeleteFrame
     iActiveView = iViews.ActiveView
     iView.Activate()    '激活背景视图
     iActiveView.Activate()    '激活保存的激活视图
 End Sub



11. 先创建出外框线;

Visual Basic
 
Dim  iLine As MECMOD.Curve2D
 
 Sub CUS_CreateFrameLine()   '创建图框框线
     '创建外框线
     iLine = CUS_CreateLine2D(0, 0, 0,  iH, "CUS_Line_T")
     iLine = CUS_CreateLine2D(0, 0, iW,  0, "CUS_Line_T")
     iLine = CUS_CreateLine2D(iW, 0, iW,  iH, "CUS_Line_T")
     iLine = CUS_CreateLine2D(0, iH, iW,  iH, "CUS_Line_T")
 End Sub



12. 将创建图框框线的过程程序加到「CUS_CreateFrame」总过程中;

Visual Basic
 
Sub  CUS_CreateFrame()
     ...
     iView.Activate()    '激活背景视图
    
CUS_CreateFrameLine()
     iActiveView.Activate()    '激活保存的激活视图
 End Sub



13. 将「CUS_Initial」、「CUS_GetPaperSize」及「CUS_CreateFrame」均添加到main过程下;

Visual Basic
 
Sub  Main()
     ...
     CUS_Initial()
     CUS_GetPaperSize()
     CUS_CreateFrame()
 End Sub



14. 此时,可运行一下程序,调试代码查看运行结果,四条直线在背景视图中创建;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图12)

15. 但是创建出的直线是默认的粗实线,我们可使用“SetRealWidth”方法来修改线宽,其中iLineWidth与CATIA中的线宽序号一致;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图13)


Visual Basic
 
Sub  CUS_SetRealWidth(ByRef iCurve2D As Curve2D, ByRef idx As Integer)
     Dim oSel As Selection
     oSel = iEditor.Selection
     oSel.Clear()
     oSel.Add(iCurve2D)
      iSlct.VisProperties.SetRealWidth(idx, 1)
     iSlct.Clear()
 End Sub



16. 回到创建外框线的过程下,对线条修改线宽;

Visual Basic
 
Sub  CUS_CreateFrameLine()   '创建图框框线
     '创建外框线(细实线)
    
iLine = CUS_CreateLine2D(0, 0, 0, iH,  "CUS_Line_T")
    
CUS_SetRealWidth(iLineT, 1)
    
iLine = CUS_CreateLine2D(0, 0, iW, 0,  "CUS_Line_T")
    
CUS_SetRealWidth(iLineT, 1)
    
iLine = CUS_CreateLine2D(iW, 0, iW, iH,  "CUS_Line_T")
    
CUS_SetRealWidth(iLineT, 1)
    
iLine = CUS_CreateLine2D(0, iH, iW, iH,  "CUS_Line_T")
    
CUS_SetRealWidth(iLineT, 1)
 End Sub


17. 接着创建剩下的直线(默认创建即为粗实线,也可通过修改线型确保创建的为2号粗实线):

Visual Basic
 
Dim  iX As Integer
 Dim iY As Integer
 Dim iLineB As MECMOD.Curve2D
 
 Sub CUS_GetPaperSize()   '获取图纸大小
     ...
     '定义标题栏定位点坐标
     iX = iW - 10 
     iY = 10
 End Sub
 
 Sub CUS_CreateFrameLine()   '创建图框框线
     ...
     '创建外框线(粗实线)
     iLineB = CUS_CreateLine2D(10, 10,  10, iH - 10, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(10, 10,  iW - 10, 10, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(iW - 10,  10, iW - 10, iH - 10, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(10, iH -  10, iW - 10, iH - 10, "CUS_Line_B")
 
     '创建标题栏横框线(粗实线)
     Dim i As Integer
     For i = 1 To 4
         iLineB = CUS_CreateLine2D(iX,  iY + 15 * i, iX - 180, iY + 15 * i, "CUS_Line_B")
     Next
 
     '创建标题栏横竖线(粗实线)
     iLineB = CUS_CreateLine2D(iX - 180,  iY, iX - 180, iY + 60, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(iX - 150,  iY, iX - 150, iY + 60, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(iX - 100,  iY, iX - 100, iY + 60, "CUS_Line_B")
     iLineB = CUS_CreateLine2D(iX - 60,  iY, iX - 60, iY + 60, "CUS_Line_B")
 End Sub


18. 运行一下程序,调试代码查看运行结果;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图14)


19. 至此,所有框线创建完毕;

创建文本

1. 所有框线创建完毕后,接下来就是对标题栏文本的创建,标题栏文本可分为两类,一类是表头文本,还有一类是刷新属性文本,我们可分开进行创建;

2. 在DrawingText Object中可以看到创建文本对象的方法;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图15)


3. 可参考示例中的add方法,得出创建文本需要填写文本的值、X、Y坐标;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图16)


4. 创建文本的同时,也需要对文本进行二次定义,有如下规则:

a.文本的字体为:3ds (OpenType);

b. 文本的字号为:3.5;

c. 文本的定位点方式为:中部居中

d. 文本对齐方式为:居中;

e. 文本的自动换行宽度设置为当前标题的列宽;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图17)


5. 从帮助文档中不难发现,上文中的设定需要使用方法对文本逐句定义;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图18)


6. 定义创建文本前的变量:

Visual Basic
 
Dim  iTexts As CATANNOTITF.DrawingText
 Dim iText As CATANNOTITF.DrawingText
 
 Sub CUS_Initial()       '初始化变量
     ...
     iTexts = iView.Texts
 End Sub



7. 可参考上文,对创建文本也定义一个自定义函数;

Visual Basic
 
Function  CUS_CreateText(ByRef iCaption As String, ByRef oX As Double, ByRef oY As  Double, ByRef iAuchorPosition As CatTextAnchorPosition, ByRef iJustification  As CatJustification, ByRef iWrappingWidth As Double, ByRef iFontSize As  Double, ByRef iName As String) As DrawingText
     CUS_CreateText =  iTexts.add(iCaption, oX, oY)
     CUS_CreateText.AnchorPosition =  iAuchorPosition
      CUS_CreateText.TextProperties.Justification = iJustification
     CUS_CreateText.WrappingWidth =  iWrappingWidth
     CUS_CreateText.SetFontSize(0, 0,  iFontSize)
     CUS_CreateText.Name = iName
 End Function



8. 开始创建文本(也可提前定义好数组,通过for循环创建);

Visual Basic
 
Sub  CUS_CreateFrameText()
     '创建表头文本
     iText =  CUS_CreateText("SIZE", iX - 165, iY + 52.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 30, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText =  CUS_CreateText("SCALE", iX - 165, iY + 37.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 30, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText =  CUS_CreateText("DATE", iX - 165, iY + 22.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 30, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText = CUS_CreateText("SHEET",  iX - 165, iY + 7.5, CatTextAnchorPosition.catMiddleCenter,  CatJustification.catCenter, 30, 3.5, "3ds (OpenType)",  "CUS_TextBT")
     iText =  CUS_CreateText("TITLE", iX - 80, iY + 52.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 40, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText =  CUS_CreateText("DESCRIPTION", iX - 80, iY + 37.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 40, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText = CUS_CreateText("REVISION",  iX - 80, iY + 22.5, CatTextAnchorPosition.catMiddleCenter,  CatJustification.catCenter, 40, 3.5, "3ds (OpenType)",  "CUS_TextBT")
     iText =  CUS_CreateText("COMPANY", iX - 80, iY + 7.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 40, 3.5,  "3ds (OpenType)", "CUS_TextBT")
     iText =  CUS_CreateText("Tecwin", iX - 30, iY + 7.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 60, 3.5,  "3ds (OpenType)", "CUS_Text_Company")
 
     '创建刷新文本
     '图纸大小:
     iText = CUS_CreateText("",  iX - 125, iY + 52.5, CatTextAnchorPosition.catMiddleCenter,  CatJustification.catCenter, 50, 3.5, "3ds (OpenType)",  "CUS_Text_SheetSize")
     '图纸比例:
     iText =  CUS_CreateText("", iX - 125, iY + 37.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 50, 3.5,  "3ds (OpenType)", "CUS_Text_SheetScale")
     '当前日期
     iText =  CUS_CreateText("", iX - 125, iY + 22.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 50, 3.5,  "3ds (OpenType)", "CUS_Text_Date")
     '图纸页码
     iText =  CUS_CreateText("", iX - 125, iY + 7.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 50, 3.5,  "3ds (OpenType)", "CUS_Text_PageNumber")
     '数模标题:
     iText =  CUS_CreateText("", iX - 30, iY + 52.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 60, 3.5,  "3ds (OpenType)", "CUS_Text_Title")
     '数模描述:
     iText =  CUS_CreateText("", iX - 30, iY + 37.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 60, 3.5,  "3ds (OpenType)", "CUS_Text_Description")
     '数模版本:
     iText =  CUS_CreateText("", iX - 30, iY + 22.5,  CatTextAnchorPosition.catMiddleCenter, CatJustification.catCenter, 60, 3.5,  "3ds (OpenType)", "CUS_Text_Revision")
 End Sub


18. 将创建文本的过程添加到创建图框的过程中;

Visual Basic
 
Sub  CUS_CreateFrame()
     ...
    
iActiveView.Activate()    '激活保存的激活视图
    
CUS_CreateFrameText()
 End Sub


19. 运行一下程序,调试代码查看运行结果;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图19)


20. 至此,所有文本对象创建完毕;


获取关联数模并刷新属性文本

1. 标题栏中有三个文本是从关联数模的属性上获取,分别是:“标题”、“描述”和“版本”;

2. 其他的文本都是含有各自的获取逻辑;

3. 新建一个刷新文本的过程;

Visual Basic
 
Sub  CUS_UpdateText()
    
 End Sub



4. 先处理图幅文本的获取逻辑,参考PaperSize方法可获取到图纸的图幅,但是返回值为一个数字,数字代表CatPaperSize中对应的条目顺序(从0开始计算);
CATIA VBA:面向工程师的设计效率提升利器(下篇)(图20)


CATIA VBA:面向工程师的设计效率提升利器(下篇)(图21)


5. 因此,我们需要写if语句来判断当前获取到的数字对应是什么图幅大小;

Visual Basic
 
Sub  CUS_UpdateText()
     '获取图幅
     Dim iTF As String
    
     iTF = iSheet.PaperSize
     If iTF = 2 Then
          iTexts.GetItem("CUS_Text_SheetSize").Text = "A0"
     ElseIf iTF = 3 Then
          iTexts.GetItem("CUS_Text_SheetSize").Text = "A1"
     ElseIf iTF = 4 Then
          iTexts.GetItem("CUS_Text_SheetSize").Text = "A2"
     ElseIf iTF = 5 Then
          iTexts.GetItem("CUS_Text_SheetSize").Text = "A3"
     ElseIf iTF = 6 Then
          iTexts.GetItem("CUS_Text_SheetSize").Text = "A4"
     End If
    
 End Sub


6. 下一个处理比例文本逻辑,这里我们借助DrawingText Object中的InsertVariable方法,直接将sheet页的比例参数添加到文本中保持关联,这样当人为修改图纸页比例后,图框中比例文本会自动刷新;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图22)

Visual Basic
 
Sub  CUS_UpdateText()
     ...
     '处理比例文本
     iText =  iTexts.GetItem("CUS_Text_SheetScale")
     iText.InsertVariable(0, 0,  iDrw.Parameters.Item("Drawing\" + iSheet.Name +  "\Scale"))
    
 End Sub


7. 下一个处理日期文本,使用vb.net的获取日期方法;

Visual Basic
 
Sub  CUS_UpdateText()
     ...
     '获取当前日期
     iText =  iTexts.GetItem("CUS_Text_Date")
     iText.Text =  Today.ToString("yyyy-MM-dd")
    
 End Sub


8. 下一个处理页码文本,生成格式为「当前页数/总页数」,所以需要获取当前工程图中的总页数(使用count方法可获取系统中对象的数量)与当前激活的图纸页为第几页;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图23)

Visual Basic
 
Sub  CUS_UpdateText()
     ...
     '获取页码
     '获取当前激活图纸页为第几页
     Dim iPageText As String
     For i = 1 To iSheets.Count
         If iSheets.Item(i).Name =  iSheet.Name Then
             iPageText = CStr(i)
         End If
     Next
     iText =  iTexts.GetItem("CUS_Text_PageNumber")
     iText.Text = iPageText &  "/" & iSheets.Count
    
 End Sub



9. 接下来处理从投影数模获取的属性值,在获取之前,我们需要先获取图纸中关联的投影数模,可使用“GetAssociatedRootProduct”函数来获取到图纸的投影数模,但是其需要从某个视图中获取,一般我们使用第一个sheet页中第三个视图对象作为识别对象(一般第三个视图多为投影视图);

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图24)

10. 先添加一个引用:CATIA ProductStructureClientIDLItf Object Libran,顶行添加一个代码语句:“Imports ProductStructureClientIDL”;

11. 那么先撰写获取投影数模的代码;

Visual Basic
 
Dim  iRefProduct As ProductStructureClientIDL.VPMReference
 
 Sub CUS_UpdateText()
     ...
     '获取关联数模
     On Error Resume Next    '当图纸中未投影数模,弹出提示
     iRefProduct =  iSheets.Item(1).Views.Item(3).DrawingGenView.GetAssociatedRootProduct
     If Err.Number <> 0 Then
         MessageBox.Show("第一页图纸未投影数模,无法获取数模属性", "CreateFrame", MessageBoxButtons.OK,  MessageBoxIcon.Information)
         Exit Sub
     End If
     On Error GoTo 0
    
 End Sub



12. 可使用GetAttributeValue方法获取数模的属性;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图25)


Visual Basic
 
Dim  iRefProduct As ProductStructureClientIDL.VPMReference
 
 Sub CUS_UpdateText()
     ...
     iText =  iTexts.GetItem("CUS_Text_Title")
     iText.Text =  iRefProduct.GetAttributeValue("V_Name")
     iText =  iTexts.GetItem("CUS_Text_Description")
     iText.Text =  iRefProduct.GetAttributeValue("V_description")
     iText =  iTexts.GetItem("CUS_Text_Revision")
     iText.Text =  iRefProduct.GetAttributeValue("revision")
    
 End Sub



13. 将获取关联数模刷新属性的过程添加到创建图框的过程中;

Visual Basic
 
Sub  CUS_CreateFrame()
     ...
    
iActiveView.Activate()    '激活保存的激活视图
    
CUS_CreateFrameText()
    
CUS_UpdateText()
 End Sub



14. 运行一下程序,调试代码查看运行结果;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图26)


15.至此,整个编码过程结束了,所有的逻辑都已完成处理;


部署使用

1.vb.net中编写的代码,会自动在本地的Debug路径下生成一个exe文件;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图27)

2.可直接双击运行这个exe文件,完成程序的运行;

3. 但是通常情况,我们都是通过在CATIA点击命令来运行程序,这里可以借助vba来调用这个exe文件;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图28)

4. 在CATIA中新建一个vba宏文件,新建一个module,写入以下代码;

Visual Basic
 
Sub  catmain()
      CATIA.SystemService.ExecuteBackgroundProcessus  "C:\Users\Think\Desktop\CreateFrameTitle.exe"
 End Sub


5. 将宏命令配置到工具条中,点击命令即可运行程序;

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图29)


CATIA VBA:面向工程师的设计效率提升利器(下篇)(图30)

 总结 


1. 在开发时,「DSYAutomation」帮助文档是我们最好的老师。文档中提供了大量示例,可以帮助我们快速找到合适的接口方法。所以,多花点时间去熟悉和善用帮助文档,会让开发过程更加高效和顺畅。

2. 有时候不知道OOTB命令对应的接口,可尝试使用宏录制功能录取操作代码(不一定能录取成功)。

3.最后,希望这篇文章能帮助到想自己进行一些CATIA二次开发,但是没有什么基础的朋友。VB.NET是你一个很好的选择,期待大家在CATIA的世界里越走越远 ヾ(•ω•`)o


关于钛闻软件

上海钛闻软件技术有限公司源自于上海江达科技发展有限公司,自2024年1月1日起,钛闻软件全面承接上海江达的人员、业务和相关资质。


钛闻软件在全国设有10个办事处,拥有超过200余人的专家顾问团队和近30年的行业经验,公司致力于向交通运输、工业装备、基础设施、航空航天、高科技电子及生命科学等行业客户提供先进的数字化解决方案及企业级应用系统。


作为达索系统重要的合作伙伴,钛闻软件在中国拥有1300多家客户。这些客户长期使用达索系统从需求、设计、工艺、仿真到制造的全生命周期解决方案,总装机量超过16000多套。钛闻软件非常注重客户的实施服务和应用支持,紧扣客户需求,引入最佳实践,让先进软件发挥出最大价值。

CATIA VBA:面向工程师的设计效率提升利器(下篇)(图31)


推荐信息