• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Проблема с путем к файлу

Автор plscomeback, 07.04.21, 13:22:01

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

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

plscomeback

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



plscomeback

Точнее как изменить файл-источник у детали в сборке, по-средствам API

Вират Лакх

iPart7.FileName = 'Полный путь'
iPart7.Update()

biomotor

Вират Лакх, а можно поподробней?

biomotor

plscomeback, есть результат по данному вопроссу?

Вират Лакх

Цитата: biomotor от 02.06.21, 09:32:05Вират Лакх, а можно поподробней?
Даже не знаю, что тут можно написать подробнее. Есть сборка, в неё компоненты. У каждого компонента IPart7 есть свойство FileName. Его можно получить и установить. После присвоения нового значения (другого абсолютного пути), чтобы изменения вступили в силу, нужно вызвать IModelObject.Update()
IModelObject - родительский интерфейс, но IPart7 этот метод наследует, так что можно написать IPart7.Update()

biomotor

Вират Лакх, проблему решил, но не IPart7, а Part0-PartX.
Спасибо за совет.

p3452

Цитата: biomotor от 03.06.21, 09:09:01проблему решил, но не IPart7, а Part0-PartX.

"Part0-PartX" - новые интерфейсы в SDK?)

biomotor

нет, имена переменных,
интерфейсы вроде SlcMan = iDocument3D.GetSelectionMng() и SlcMan.GetObjectByIndex (n)
и параметр fileName

TxRide

Цитата: biomotor от 03.06.21, 09:09:01Вират Лакх, проблему решил, но не IPart7, а Part0-PartX.
Спасибо за совет.
У меня такая же проблема, но с разработкой скриптов не сталкивался.
Можете скинуть исходный файл скрипта или подсказать с чего мне начать.

biomotor

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()

TxRide

biomotor, спасибо, буду разбираться :beer:

TxRide

Большое спасибо. Разобрался. Все работает отлично!

biomotor

TxRide, допилить бы функцию добавления, а не только изменения файла....
+ Благодарностей: 1

Михаил88

Цитата: biomotor от 18.11.21, 09:38:51TxRide, допилить бы функцию добавления, а не только изменения файла....

Что конкретно?

biomotor

Михаил88, помните мы с Вами обсуждали уже.
Добавление в сборку библиотечного элемента через то же меню....

Михаил88

Можно сделать, сейчас вышлю код.

Михаил88

# -*- 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

Так вы предлагали делать добавление компонента в сборку?

biomotor

Михаил88, это немного не то.
Помните Вы вызывали встроенное окно компаса с выбором файла из библиотеки,
в файле .py был прописан только путь к библиотеке.
тоже самое бы только чтобы добавить файл...

https://forum.ascon.ru/index.php?topic=35564.msg291147#msg291147
вот то же самое только добавить а не заменить...
а именно:
#  Выберем объект из библиотеки
FileName = IModelLibrary.ChoiceModelFromLib(FPath, 0)[0]

Михаил88

я сделал свое окно библиотеки.
изображение_2021-11-23_113735.png
с окном , которое вызывается я поработал, но мне оказалось не очень удобно. По этому решил сделать свое. Аналогично тому как вы делали. Только добавил предпросмотр и окно где видны комментарии. Все данные беру напрямую из библиотеки kle.
+ Благодарностей: 1