【问题标题】:CATIA macro from python来自 python 的 CATIA 宏
【发布时间】:2018-04-02 11:42:13
【问题描述】:

我想使用我的宏 (.CATScript) 打开 catia 界面并将宏脚本中列出的更改更改为 .CATpart 并将输出作为 .stp 文件。是否可以使用python来实现这个功能?

Run a Catia macro with a python script 中有一个示例,但它不适用于我的情况。我编辑了如下代码并运行了它。

import win32com.client
catapp = win32com.client.Dispatch("CATIA.Application")
catapp.StartCommand('Macro_schweller_model_lsopt.CATScript')

我的错误是

File "C:\FK-Programme\python36-32\Anaconda\Install\lib\site-packages\win32com\client\dynamic.py", line 91, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)

com_error: (-2147221005, 'Ungültige Klassenzeichenfolge', None, None)

我的 .CATscript 看起来像这样

Sub CATMain()

    Dim FileToOpen as String
    Dim partDocument1 As Document
    Dim part1 As Part
    Dim AnglePara As Parameter
    Dim parameters1 As Parameters
    Dim AmplitudePara As Parameter
    Dim WavelengthPara As Parameter

    FileToOpen = "E:\Datei\Results\Optimization\LS_OPT_results\Optimization_model_1\Schweller_fully_corrugated.CATPart"

    Set partDocument1 = CATIA.Documents.Open(FileToOpen)

    Set part1 = partDocument1.Part

    Set parameters1 = part1.Parameters

    Set AnglePara = parameters1.RootParameterSet.DirectParameters.Item("Angle")

    AnglePara.Value = -7

    Set AmplitudePara = parameters1.RootParameterSet.DirectParameters.Item("Amplitude")

    AmplitudePara.Value = 30

    Set WavelengthPara = parameters1.RootParameterSet.DirectParameters.Item("Wavelength")

    WavelengthPara.Value = 30

    CATIA.DisplayFileAlerts = False

    partDocument1.Part.Update

    partDocument1.ExportData "E:\Datei\Results\Optimization\LS_OPT_results\Optimization_model_1\Schweller.stp", "stp" 


End Sub 

【问题讨论】:

  • 我对 VBA 一无所知,但 _ 会不会是文件名中的问题 - 即使它们显然没有被禁止 (msdn.microsoft.com/en-us/vba/language-reference-vba/articles/…)?另外,你搜索过Ungültige Klassenzeichenfolge 和英文翻译吗?
  • Ungültige Klassenzeichenfolge 转换为无效的类字符串
  • 你的问题回答了吗?

标签: python-2.7 macros catia


【解决方案1】:

StartCommand 方法(据我所知)只能启动分配给工具栏按钮的宏。我建议您改用SystemService.ExecuteScript 方法,它允许您直接运行脚本。然后您的示例将被修改为如下所示:

import win32com.client
catapp = win32com.client.Dispatch("CATIA.Application")
catapp.SystemService.ExecuteScript(
    # Macro library name/path
    r"C:\Path\To\Directory\Containing\The\Script",
    # Type of macro library (document/directory/VBA project)
    1,  # directory
    # Macro name
    "Macro_schweller_model_lsopt.CATScript",
    # Function name
    "CATMain",
    # Arguments
    tuple(),
)

有关SystemService.ExecuteScript 方法的更多信息,请访问http://catiadoc.free.fr/online/interfaces/interface_SystemService.htm#ExecuteScript

【讨论】:

  • 嗨@Olle-vidner,我将调用我通过python记录的宏。我必须输入什么作为函数名称? “要调用的函数的名称”是什么意思?
  • @ShahramShinshaawh,程序应该基本相同。 “要调用的函数的名称”是要运行的宏文件的函数或子例程的名称。当您在 CATIA 中以交互方式录制宏时,这通常是 CATMain。请考虑发布一个新问题,为您的问题提供更多背景信息,也许我可以为您提供帮助。
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多