使用Python在CATIA中创建新产品

使用Python在CATIA中创建新产品,python,python-3.x,automation,catia,Python,Python 3.x,Automation,Catia,我正在用Python脚本自动创建一个新产品,并且遇到了一个问题,即交互事件被卡在“零件号”对话框中。创建新零件时不会发生这种情况,而只是创建新产品。以下是脚本的适用部分(CATIA已打开): 问题是我正在开发一个供其他人使用的小工具,如果它挂断了,它就没有多大用处 单击“取消”可以摆脱对话框,但之后不会发生交互操作。单击“确定”可以解决问题,但脚本最好能够在没有交互的情况下准备最终结果,以限制用户错误并提高易用性 我知道我可以创建产品并对其进行操作(即添加零件、添加新产品等),然后成功保存它。因

我正在用Python脚本自动创建一个新产品,并且遇到了一个问题,即交互事件被卡在“零件号”对话框中。创建新零件时不会发生这种情况,而只是创建新产品。以下是脚本的适用部分(CATIA已打开):

问题是我正在开发一个供其他人使用的小工具,如果它挂断了,它就没有多大用处

单击“取消”可以摆脱对话框,但之后不会发生交互操作。单击“确定”可以解决问题,但脚本最好能够在没有交互的情况下准备最终结果,以限制用户错误并提高易用性

我知道我可以创建产品并对其进行操作(即添加零件、添加新产品等),然后成功保存它。因此,进程正在执行,它们不再显示。我似乎找不到一种方法来通过“零件号”对话框。我甚至尝试用编程的方式命名它,这很有效,但并没有破坏对话框

打开现有产品效果非常好,任何脚本编写过程都可以毫无问题地继续进行。但是,以编程方式创建产品、保存和关闭会导致CATIA锁定。。。因此,保存和重新打开现有产品的选项是不可能的

我还引用了v5Automation.chm,但找不到与对话框交互的方法

我还在新产品及其零件上尝试了
.Update()
。其他一些保证是
CATIA.Visible=True
CATIA.RefreshDisplay=True


免责声明:我知道可以使用VBA,并且不会造成此问题。我正在寻找使用Python(2或3,没关系)解决此问题的方法。

到目前为止,我找到的唯一解决此问题的方法是创建一个模板产品(在本例中,只是一个空产品),然后执行
catDocs.NewFrom()
并根据需要添加产品结构。

到目前为止,我找到的唯一方法是,要避免这个问题,需要创建一个模板产品(在本例中,只是一个空产品),然后执行
catDocs.NewFrom()
,并根据需要添加产品结构。

这篇文章很旧,但由于我在遇到相同问题时发现了这个页面,所以我决定添加我的解决方案。我在CATIA中发现了一些这样的方法—在CATIA VBA中工作良好,但不通过COM接口。我找到的最佳解决方案是在字符串中编写一个迷你VBA函数,然后通过Python在CATIA中调用它。以下是一个例子:

import random
import win32com.client

CATIA = win32com.client.GetActiveObject('CATIA.Application')
CATVBALanguage = 1

# This should work, but CATIA leaves up the dialog window and it can affect
# the rest of the code execution
# NewProductDocument = CATIA.Documents.Add('Product')

# Instead, write the code in VBA and then have CATIA execute it.  You can
# pass in arguments and capture the results as demonstrated below.
CREATE_PRODUCT_VBA_CODE = '''
    Public Function create_product(part_number as  CATBSTR) as Document
        Set create_product = CATIA.Documents.Add("Product")
        create_product.Product.PartNumber = part_number
    End Function
'''
PART_NUMBER = 'test_product_{}'.format(random.randint(1, 100))
NewProductDocument = CATIA.SystemService.Evaluate(
    CREATE_PRODUCT_VBA_CODE,   # String with the VBA code to execute
    CATVBALanguage,            # 1 to indicate this string is VBA code
    'create_product',          # VBA function to call and return result from
    [PART_NUMBER]              # Array of arguments, in order for VBA function
)

# Can still interact with this returned object as if we had created it
print(NewProductDocument.Product.PartNumber)

这篇文章是旧的,但由于我发现这个页面时,有相同的问题,我想我会添加我的解决方案。我在CATIA中发现了一些这样的方法—在CATIA VBA中工作良好,但不通过COM接口。我找到的最佳解决方案是在字符串中编写一个迷你VBA函数,然后通过Python在CATIA中调用它。以下是一个例子:

import random
import win32com.client

CATIA = win32com.client.GetActiveObject('CATIA.Application')
CATVBALanguage = 1

# This should work, but CATIA leaves up the dialog window and it can affect
# the rest of the code execution
# NewProductDocument = CATIA.Documents.Add('Product')

# Instead, write the code in VBA and then have CATIA execute it.  You can
# pass in arguments and capture the results as demonstrated below.
CREATE_PRODUCT_VBA_CODE = '''
    Public Function create_product(part_number as  CATBSTR) as Document
        Set create_product = CATIA.Documents.Add("Product")
        create_product.Product.PartNumber = part_number
    End Function
'''
PART_NUMBER = 'test_product_{}'.format(random.randint(1, 100))
NewProductDocument = CATIA.SystemService.Evaluate(
    CREATE_PRODUCT_VBA_CODE,   # String with the VBA code to execute
    CATVBALanguage,            # 1 to indicate this string is VBA code
    'create_product',          # VBA function to call and return result from
    [PART_NUMBER]              # Array of arguments, in order for VBA function
)

# Can still interact with this returned object as if we had created it
print(NewProductDocument.Product.PartNumber)

我试图复制你的问题,但我没有遇到它。使用增量默认名称创建的产品很好。 然后我认为这与设置有关,因为对话框与添加新零件时弹出的对话框相似。 我发现我的选项是Infrastructure>ProductInfrastructure>Product structure>Part Number:Manual input未选中


我不知道这与是否使用VBA有什么关系,但选中它会产生问题,取消选中它会消除问题,同时仍然从Python发送相同的命令。

我试图复制您的问题,但没有遇到它。使用增量默认名称创建的产品很好。 然后我认为这与设置有关,因为对话框与添加新零件时弹出的对话框相似。 我发现我的选项是Infrastructure>ProductInfrastructure>Product structure>Part Number:Manual input未选中


我不知道这与是否使用VBA有什么关系,但检查它会创建问题,取消选中它会删除问题,同时仍然从Python发送相同的命令。

@Scott B我发现了相同的问题,在使用dispatch之前使用了您的解决方案,并在那里出错,现在我在GetActiveObject com_错误上得到了一个错误:(-2147221005,“无效的类字符串”,无,无),你知道吗?@Scott B我发现了同一个问题,我在使用dispatch之前使用了你的解决方案,在那里得到了一个错误,现在我在GetActiveObject com_错误上得到了一个错误:(-2147221005,“无效的类字符串”,无,无),您知道吗?