Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Python и КОМПАС-Макро => Тема начата: plscomeback от 07.04.21, 13:22:01

Название: Проблема с путем к файлу
Отправлено: plscomeback от 07.04.21, 13:22:01
Есть сборка, в ней есть деталь вставленная с библиотеки *.kle. Возникла проблема, что файлы с этой библиотеки грузятся не с нее, а с кеш папки... Изменить файл через свойства детали и выбор пути не помогает, т.к требует именно m3d, помогите написать скрипт, а автозамены. Или хотябы функцию как изменить внешний файл

(https://downloader.disk.yandex.ru/preview/4fd237e20bbd79b5d6e47c5c792eb9da65a85eead58774d3c4d2f418104f52d7/606dbf32/gXUEVo716DQTEiX4g-mRpAc6Ck1TRgFJvnUNBSOp_gLylJmzidNLtMOy47-p3e7oyyhxc-YcRPFpbOoITkrJ6w%3D%3D?uid=0&filename=2021-04-07_13-12-32%20%282%29.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&owner_uid=0&tknv=v2&size=2560x1297)
Название: Re: Проблема с путем к файлу
Отправлено: plscomeback от 08.04.21, 13:17:58
Точнее как изменить файл-источник у детали в сборке, по-средствам API
Название: Re: Проблема с путем к файлу
Отправлено: Вират Лакх от 09.04.21, 04:47:44
iPart7.FileName = 'Полный путь'
iPart7.Update()
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 02.06.21, 09:32:05
Вират Лакх, а можно поподробней?
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 02.06.21, 09:37:00
plscomeback, есть результат по данному вопроссу?
Название: Re: Проблема с путем к файлу
Отправлено: Вират Лакх от 03.06.21, 04:44:28
Цитата: biomotor от 02.06.21, 09:32:05Вират Лакх, а можно поподробней?
Даже не знаю, что тут можно написать подробнее. Есть сборка, в неё компоненты. У каждого компонента IPart7 есть свойство FileName. Его можно получить и установить. После присвоения нового значения (другого абсолютного пути), чтобы изменения вступили в силу, нужно вызвать IModelObject.Update()
IModelObject - родительский интерфейс, но IPart7 этот метод наследует, так что можно написать IPart7.Update()
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 03.06.21, 09:09:01
Вират Лакх, проблему решил, но не IPart7, а Part0-PartX.
Спасибо за совет.
Название: Re: Проблема с путем к файлу
Отправлено: p3452 от 03.06.21, 10:18:01
Цитата: biomotor от 03.06.21, 09:09:01проблему решил, но не IPart7, а Part0-PartX.

"Part0-PartX" - новые интерфейсы в SDK?)
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 03.06.21, 10:20:04
нет, имена переменных,
интерфейсы вроде SlcMan = iDocument3D.GetSelectionMng() и SlcMan.GetObjectByIndex (n)
и параметр fileName
Название: Re: Проблема с путем к файлу
Отправлено: TxRide от 02.11.21, 09:07:57
Цитата: biomotor от 03.06.21, 09:09:01Вират Лакх, проблему решил, но не IPart7, а Part0-PartX.
Спасибо за совет.
У меня такая же проблема, но с разработкой скриптов не сталкивался.
Можете скинуть исходный файл скрипта или подсказать с чего мне начать.
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 08.11.21, 09:00:12
TxRide, могу скинуть готовый код, которым я пользуюсь:
(Ошибка будет в том случае если компас не запущен!
В этом случае последующие скрипты работать не будут, нужно будет завершить скрытый процесс компаса или перезапустить ПК)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache

#  Полный путь к библиотеке
FPath = 'C:\Program Files\ASCON\KOMPAS-3D v19\Libs\MyLib.kle'

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

#  Подключим описание интерфейсов API7
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))

#  Получим текущий активный документ
kompas_document = application.ActiveDocument

#  Если ни один документ не открыт выход
if kompas_document == None: quit()

#  Получим тип документа
DocType = kompas_object.ksGetDocumentType(0)

#  Если документ не деталь или сборка выход
if DocType != (5 or 6): quit()

#  Получим указатель на интерфейс текущего документа трехмерной модели
iDocument3D = kompas_object.ActiveDocument3D()

#  Получим указатель на интерфейс менеджера выделенных объектов
SlcMan = iDocument3D.GetSelectionMng()

#  Выход из программы при отсутствии выделенного объекта
if not SlcMan.GetObjectByIndex(0): quit()

#  Получим количество выделенных объектов
Count = SlcMan.GetCount()

#  Получим указатель на интерфейс библиотеки моделей
IModelLibrary = kompas_object.GetModelLibrary()

#  Выберем объект из библиотеки
FileName = IModelLibrary.ChoiceModelFromLib(FPath, 0)[0]

#  Меняем все выделенные библиотечные объекты
Part = {}
for n in range(0, Count):
    Part[n] = SlcMan.GetObjectByIndex(n)
    Part[n].fileName = FileName
for n in range(0, Count):
    Part[n].Update()
Название: Re: Проблема с путем к файлу
Отправлено: TxRide от 09.11.21, 09:11:24
biomotor, спасибо, буду разбираться :beer:
Название: Re: Проблема с путем к файлу
Отправлено: TxRide от 10.11.21, 12:09:35
Большое спасибо. Разобрался. Все работает отлично!
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 18.11.21, 09:38:51
TxRide, допилить бы функцию добавления, а не только изменения файла....
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 18.11.21, 10:58:50
Цитата: biomotor от 18.11.21, 09:38:51TxRide, допилить бы функцию добавления, а не только изменения файла....

Что конкретно?
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 18.11.21, 11:50:03
Михаил88, помните мы с Вами обсуждали уже.
Добавление в сборку библиотечного элемента через то же меню....
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 18.11.21, 11:53:28
Можно сделать, сейчас вышлю код.
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 18.11.21, 11:59:40
# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим константы API Компас
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 = kompas_api7_module.IApplication(
    Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID,
                                                             pythoncom.IID_IDispatch))

#  Получим активный документ
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
kompas_document_3d1 = kompas_api7_module.IKompasDocument3D1(kompas_document_3d)
kompas_document_3d1.ExecuteProcessOfInsertComponentFromFile(r'C:\Библиотека.kle|Drilling screw  ISO 15481 - ST4,2 x 16 - H.m3d',
                                                            kompas6_constants.prAddPartFromFile)
kompas_document_3d1.LibProcess(kompas6_constants.prAddPartFromFile)

Сюда вставляете свой путь C:\Библиотека.kle|Drilling screw  ISO 15481 - ST4,2 x 16 - H.m3d

Так вы предлагали делать добавление компонента в сборку?
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 23.11.21, 08:33:43
Михаил88, это немного не то.
Помните Вы вызывали встроенное окно компаса с выбором файла из библиотеки,
в файле .py был прописан только путь к библиотеке.
тоже самое бы только чтобы добавить файл...

https://forum.ascon.ru/index.php?topic=35564.msg291147#msg291147
вот то же самое только добавить а не заменить...
а именно:
#  Выберем объект из библиотеки
FileName = IModelLibrary.ChoiceModelFromLib(FPath, 0)[0]
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 23.11.21, 09:46:39
я сделал свое окно библиотеки.
изображение_2021-11-23_113735.png
с окном , которое вызывается я поработал, но мне оказалось не очень удобно. По этому решил сделать свое. Аналогично тому как вы делали. Только добавил предпросмотр и окно где видны комментарии. Все данные беру напрямую из библиотеки kle.
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 23.11.21, 09:54:58
biomotor, вообще если честно я не понял почему не то. Лучше по подробнее описать , как эта процедура должна выглядеть и что конкретно должно происходить в окне компаса. Лучше со скриншотами.
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 23.11.21, 11:13:27
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache

#  Полный путь к библиотеке
FPath = r'C:\Program Files\ASCON\KOMPAS-3D v19\Libs\MyLib.kle'

#  Подключим константы API Компас
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants

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

#  Подключим описание интерфейсов API7
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))

#  Получим текущий активный документ
kompas_document = application.ActiveDocument

#  Получим указатель на интерфейс библиотеки моделей
iModelLibrary = kompas_object.GetModelLibrary()

#  Выберем объект из библиотеки
FileName = iModelLibrary.ChoiceModelFromLib(FPath, 0)[0]

kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
kompas_document_3d1 = kompas_api7_module.IKompasDocument3D1(kompas_document_3d)
kompas_document_3d1.ExecuteProcessOfInsertComponentFromFile(FileName, kompas6_constants.prAddPartFromFile)
kompas_document_3d1.LibProcess(kompas6_constants.prAddPartFromFile)


Что у вас там не получается мне не понятно, вот. Надо было просто соединить вашу часть кода с моей и все.
У меня работает. При запуске появляется окно библиотеки с выбором деталей, выбираете нажимаете выбрать, запускается процесс вставки  детали. Дальше у же код сами доработаете.
Название: Re: Проблема с путем к файлу
Отправлено: biomotor от 23.11.21, 11:39:36
Михаил88, напрямую? можно поподробнее?

блин, не пойму, что за шляпа, тот код что я скинул перестал запускаться.... ((((
Название: Re: Проблема с путем к файлу
Отправлено: TxRide от 26.11.21, 16:14:53
Подскажите как вы наполняете библиотеку?
Я наполнял через встроенный редактор библиотек, но столкнулся с проблемой когда мой сосед по парте решил тоже в неё что-то добавить.
Работать с библиотекой может только один человек за раз.
У вас случайно нет решения этой проблемы?
Название: Re: Проблема с путем к файлу
Отправлено: Михаил88 от 26.11.21, 18:48:05
Цитата: TxRide от 26.11.21, 16:14:53Подскажите как вы наполняете библиотеку?
Я наполнял через встроенный редактор библиотек, но столкнулся с проблемой когда мой сосед по парте решил тоже в неё что-то добавить.
Работать с библиотекой может только один человек за раз.
У вас случайно нет решения этой проблемы?

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