Как создавать и использовать объекты из COM-интерфейса Inventor в python (pywin32) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь использовать COM API Autodesk Inventor для создания сценария python, который будет генерировать PDF-файлы с подборкой на чертежах Inventor. Затем эти PDF-файлы будут обрабатываться определенными способами, которые не важны для моего вопроса. Я использую pywin32 для доступа к COM API, но я не очень знаком с тем, как используются COM API, и с модулем pywin32.

Это уровень документации API Inventor, который Мне удалось найти (схема справочного документа по объектной модели API) , и я не смог найти документацию по отдельным перечисленным объектам. Таким образом, я основываю свое понимание использования этих объектов на том, что я могу найти из примеров в Интернете (все на VB или iLogi c - собственный простой встроенный язык Inventor).

Большой Проблема, с которой я сталкиваюсь, заключается в создании объектов, которые я хотел бы использовать. Упрощенный пример ниже:

from win32com.client import *

# user chooses file paths for open and save here...
drawing_filepath = ""

# Open Inventor application, and set visible (so I can tell it's opened for now)
app = Dispatch('Inventor.Application')
app.Visible = True

# Open the file to be saved as a pdf (returns a Document object) 
app.Documents.Open(drawing_filepath)
# Cast the opened Document object to a DrawingDocument object (it is guaranteed to be a drawing)
drawing = CastTo(app.ActiveDocument, "DrawingDocument")

# Create and setup a print manager (so can use "Adobe PDF" printer to convert the drawings to PDF)
print_manager = ??? # How can I create this object
# I've tried:
# print_manager = Dispatch("Inventor.Application.Documents.DrawingDocument.DrawingPrintManager") #"Invalid class string"
# print_manager = drawing.DrawingPrintManager() #"object has no attribute 'DrawingPrintManger'
# print_manager = drawing.DrawingPrintManager   # same as above
# print_manager = drawing.PrintManger # worked in the end
print_manager.Printer = "Adobe PDF"
print_manager.NumberOfCopies = 1
print_manager.ScaleMode = print_manager.PrintScaleModeEnum.kPrintFullScale
print_manager.PaperSize = print_manager.PrintSizeEnum.kPaperSizeA3

# Print PDF
print_manager.SubmitPrint()

Так что я не могу понять, как создать DrawingPrintManager для использования! Вы можете видеть, что я избегал этой проблемы при создании своего объекта DrawingDocument, так как я только что узнал, что есть атрибут ActiveDocument, который я могу получить из самого приложения.

Я также:

  • не знаю, каков полный список атрибутов и методов для DrawingPrintManager, поэтому я не знаю, как установить местоположение для сохранения
  • не знаю точно, что два перечисления I ' m, которые я пытаюсь использовать, на самом деле определены в DrawingPrintManager, но я могу понять это, когда у меня действительно будет DrawingPrintManager для работы с

Если кто-то с большим опытом использования COM API или pywin32 может мне помочь, Я был бы очень благодарен. И то же самое, если кто-то может указать мне на какую-либо фактическую документацию по объектам API Inventor, которая облегчит задачу.

Спасибо

Редактировать: После публикации я почти сразу обнаружил, что я можно получить PrintManager (не могу определить, является ли PrintManager или DrawingPrintManager), открыв drawing.PrintManager вместо drawing.DrawingPrintManager.

Однако это обходной путь, поскольку он не отвечает на мой вопрос о том, как создавать объекты внутри pywin32.

Моя проблема в продвижении вперед заключается в том, чтобы найти, где я могу получить доступ к объектам PrintScaleModeEnum и PrintSizeEnum, и найти способ установить местоположение для сохранения напечатанного PDF (который, я думаю, будет отдельным вопросом, так как это, вероятно, не связанные с COM API).

1 Ответ

1 голос
/ 14 апреля 2020

Я не знаком с python и pywin32, но я пытаюсь ответить на ваши вопросы.

Документация по API Inventor доступна в локальной установке "C: \ Users \ Public \ Documents \ Autodesk \ Inventor 2020 \ Local Help "или онлайн https://help.autodesk.com/view/INVNTOR/2020/ENU/

Как правило, вы не можете создавать новые экземпляры объектов API Inventor. Вы должны получить их в результате соответствующего метода или значения свойства.

Например:

Вы НЕ МОЖЕТЕ сделать это

doc = new Inventor.Document()

Вы ДОЛЖНЫ сделать это

doc = app.Documents.Add(...)

С диспетчером печати это

print_manager = drawing.PrintManger 
# this returns object of type Inventor.DrawingPrintManager 
# when drawing is of type Inventor.DrawingDocument

Подробнее см.

...