Экспорт 3D моделей

Автор DJD, 09.11.19, 09:06:19

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

DJD

Добрый день! Пытаюсь разобраться  с макросами, а именно написать макрос экспорта 3D моделей в необходимые форматы IGS, STP, X_T. Но мой макрос не желает работать, прошу помочь разобраться, т.к. мой уровень в питоне "начал изучать вчера"
# -*- coding: cp1251 -*-
#|Сохранить как STP, IGS, X_T

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom, os, time
from win32com.client import Dispatch, gencache
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

iDocument3D = iKompasObject.ActiveDocument3D()

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

#Экспорт в stp
iStpFormatParam = KAPI.AdditionFormatParam(iDocument3D)
iStpFormatParam.Init()
iStpFormatParam.format = 3

iIgsFormatParam = KAPI.AdditionFormatParam(iDocument3D)
iIgsFormatParam.Init()
iIgsFormatParam.format = 4
iIgsFormatParam.topolgyIncluded = False

iXtFormatParam = KAPI.AdditionFormatParam(iDocument3D)
iXtFormatParam.Init()
iXtFormatParam.format = 2
iXtFormatParam.formatBinary = True

if iDocument:
  directory = iDocument.Path + "\exp"
  if not os.path.exists(directory):
    os.makedirs(directory)
  #Экспорт в stp
  exportName = iDocument.Name[:-4] + ".stp" 
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iDocument3D.iStpFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
  #Экспорт в igs
  exportName = iDocument.Name[:-4] + ".igs" 
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iIgsFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
  #Экспорт в x_t
  exportName = iDocument.Name[:-4] + ".x_t" 
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iXtFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
else:
  iApplication.MessageBoxEx("Нет активного документа!", "Экспорт", 48)

DJD

#1
С запуском разобрался. Вот исправленный рабочий код
# -*- coding: cp1251 -*-
#|Сохранить как STP, IGS, X_T

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom, os, time
from win32com.client import Dispatch, gencache
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

iDocument3D = iKompasObject.ActiveDocument3D()

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

#Параметры формата stp
iStpFormatParam = iDocument3D.AdditionFormatParam()
iStpFormatParam.Init()
iStpFormatParam.format = 4

#Параметры формата igs
iIgsFormatParam = iDocument3D.AdditionFormatParam()
iIgsFormatParam.Init()
iIgsFormatParam.format = 4
iIgsFormatParam.topolgyIncluded = False

#Параметры формата xt
iXtFormatParam = iDocument3D.AdditionFormatParam()
iXtFormatParam.Init()
iXtFormatParam.format = 2
iXtFormatParam.formatBinary = True

if iDocument:
  directory = iDocument.Path + "\exp"
  if not os.path.exists(directory):
    os.makedirs(directory)
#  Экспорт в stp
  exportName = iDocument.Name[:-4] + ".stp"
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iStpFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
#  Экспорт в igs
  exportName = iDocument.Name[:-4] + ".igs" 
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iIgsFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
#  Экспорт в x_t
  exportName = iDocument.Name[:-4] + ".x_t" 
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iXtFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
else:
  iApplication.MessageBoxEx("Нет активного документа!", "Экспорт", 48)

Но теперь не понятно, почему все форматы сохраняются с одинаковым размером файла.
На сриншоте ниже первые три файла были сохранены вручную из компаса, следующие с помощью скрипта:
Screenshot_3.png

Vi2

Я думаю, что единственное объяснение одинаковости файлов в том, что используется один и тот же объект, отвечающий за дополнительные параметры сохранения. Попробуй тест написать таким образом, чтобы "получил объект-установил параметры-сохранил в этом формате" для каждого формата поочерёдно.

PS
Я не знаю, как сравнить на Питоне переменные iStpFormatParam, iIgsFormatParam и iXtFormatParam. На VB это было бы так "iStpFormatParam Is iIgsFormatParam" и было бы равно True при одном и том же объекте.

DJD

Действительно помогло, спасибо!
# -*- coding: cp1251 -*-
#|Сохранить как STP, IGS, X_T

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom, os, time
from win32com.client import Dispatch, gencache
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

#  Подключим описание интерфейсов API5
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))

iDocument3D = iKompasObject.ActiveDocument3D()

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
iApplication = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))

iDocument = iApplication.ActiveDocument
iKompasDocument3D = KAPI7.IKompasDocument3D(iDocument)

if iDocument:
  directory = iDocument.Path + "\exp"
  if not os.path.exists(directory):
    os.makedirs(directory)
#  Экспорт в stp
  iFormatParam = iDocument3D.AdditionFormatParam()
  iFormatParam.Init()
  iFormatParam.format = 3
  exportName = iDocument.Name[:-4] + ".stp"
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
#  Экспорт в igs
  iFormatParam.Init()
  iFormatParam.format = 4
  iFormatParam.topolgyIncluded = False
  exportName = iDocument.Name[:-4] + ".igs"
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
#  Экспорт в x_t
  iFormatParam.Init()
  iFormatParam.format = 2
  iFormatParam.formatBinary = True
  exportName = iDocument.Name[:-4] + ".x_t"
  if iDocument3D.SaveAsToAdditionFormat(directory + "\\" + exportName, iFormatParam):
    iApplication.MessageBoxEx("Export done\n" + exportName, "Экспорт", 64)
  else:
    iApplication.MessageBoxEx("Error exporting\n" + exportName, "Экспорт", 64) 
else:
  iApplication.MessageBoxEx("Нет активного документа!", "Экспорт", 48)