Открыть файл-источник из вида

Автор maminagadost, 05.02.20, 13:52:39

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

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

maminagadost

05.02.20, 13:52:39 Последнее редактирование: 05.02.20, 14:25:48 от maminagadost
Добрый день. Цель: открыть файл-источник из параметров текущего вида (полученного с модели) чертежа.
Пытался использовать интерфейс IInsertionDefinition.
Пытался получить имя файла-источника. В идеале использовать метод Open из того же интерфейса.

Следующий код ругается конечно:

kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch))
MH.iApplication  = application
IInsertionDefinition = Dispatch("Kompas.Application.7")
FileName = IInsertionDefinition.FileName

Slaviation

Добрый день.

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.ActiveView
insertions_manager = kompas_api7_module.IInsertionsManager(kompas_document)
insertion_definition = insertions_manager.InsertionDefinition(kompas6_constants.ksTReferenceView, 0)
print(insertion_definition.FileName)

maminagadost

Ругается: 'NoneType' object has no attribute 'FileName'

Slaviation

Значит в активном чертеже нет вставок типа ksTReferenceView, созданных командой "Главное меню / Вставка / Изображение из вида другого чертежа...",
Попробуйте другие типы вставок:
ksTBodyFragment
ksTReferenceFragment
ksTLocalFragment
ksTBodyView



 

maminagadost

В чертеже есть виды вставленные методом вид с модели. Данный метод не подходит под указанный вариант?

upd
вообще другой случай по факту

Slaviation

Надо было сразу уточнить, что Ваш подопытный вид - "Вид с модели"

# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.View(1)  # Номер может быть другой
association_view = kompas_api7_module.IAssociationView(view)
print(association_view.SourceFileName)

+ Благодарностей: 2

maminagadost

Грасиас! То что нужно. Номер текущего вида я определять научился, так что всё ок.
Цитата: Slaviation от 05.02.20, 14:20:49Надо было сразу уточнить, что Ваш подопытный вид - "Вид с модели"

# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
views_and_layers_manager = kompas_document_2d.ViewsAndLayersManager
views = views_and_layers_manager.Views
view = views.View(1)  # Номер может быть другой
association_view = kompas_api7_module.IAssociationView(view)
print(association_view.SourceFileName)



sevrya

Добрый день.
Пытаюсь изменить путь к файлу-источнику (заменить файл-источник) в чертеже.
Использую:
association_view.SourceFileName = "Путь до новой модели"
При этом:
print(association_view.SourceFileName) выдает новый путь,
но в чертеже изменения не происходят.

Михаил88

Цитата: sevrya от 18.03.22, 14:50:48Добрый день.
Пытаюсь изменить путь к файлу-источнику (заменить файл-источник) в чертеже.
Использую:
association_view.SourceFileName = "Путь до новой модели"
При этом:
print(association_view.SourceFileName) выдает новый путь,
но в чертеже изменения не происходят.


# -*- coding: utf-8 -*-
from win32com.client import Dispatch, gencache

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
# API7
kompas_api7_module = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
application = Dispatch('Kompas.Application.7')
application.HideMessage = kompas6_constants.ksHideMessageNo
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
iViewsAndLayersManager = kompas_document_2d.ViewsAndLayersManager
iViews = iViewsAndLayersManager.Views
view = iViews.View(1)
iAssociationView = kompas_api7_module.IAssociationView(view)
sourceFileName = iAssociationView.SourceFileName
iAssociationView.SourceFileName = r'C:\Users\User\Desktop\Деталь3.m3d'
view.Update()
kompas_document_2d_1 = kompas_api7_module.IKompasDocument2D1(kompas_document_2d)
kompas_document_2d_1.RebuildDocument()
application.HideMessage = kompas6_constants.ksShowMessage
+ Благодарностей: 2