Замена в сборке файла-источника из .kle библиотеки

Автор biomotor, 02.06.21, 09:28:10

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

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

biomotor

Каким образом сделать макрос питона на замену выделенного библиотечного .kle элемента?

т.е.:
есть сборка, в нее подключен/а деталь/сборка из библиотеки .kle.
в свойствах детали/сборки указан 'файл-источник' C:\Program Files\ASCON\KOMPAS-3D v19\Libs\mylib.kle|Сборка.a3d
необходимо заменить на C:\Program Files\ASCON\KOMPAS-3D v19\Libs\mylib.kle|Сборка_22.a3d

примерная реализация:
жмешь макрос, он выкидывает окно, в котором ты вставляешь 'путь к библиотеке|сборка' или просто имя сборки (второй вариант предпочтительней), жмешь ок или enter и макрос меняет путь в графе 'файл-источник' и перестраивает сборку.

p.s. может не полностью, но хотябы в какую сторону копать...

biomotor

#1
Полученный результат:

    import pythoncom
    from win32com.client import Dispatch, gencache

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

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

    #  Срез пути до файла библиотеки
    Part0 = SlcMan.GetObjectByIndex (0)
    PathName = Part0.fileName
    i = len(PathName)
    n = 0
    for n in range(0,i,1):
        if PathName[n] == '|':
            break
    Lib = PathName[0:n+1]

    #  Собираем путь к библиотеке и имя файла
    Name = 'Сборка_22.a3d'
    LibName = Lib + Name

    #  Производим замену всех выделенных элементов
    n=0
    Part = {}
    for n in range(0,Count,1):
        Part[n] = SlcMan.GetObjectByIndex (n)
        Part[n].fileName = LibName
    for n in range(0,Count,1):
        Part[n].Update()

biomotor

сделал приложение.
для замены нужно:
1) выделить объекты,
2) вписать/вставить название заменяемого файла без директорий.
3) нажать замена

Library.png

https://disk.yandex.ru/d/v9yBYywgKT2TgQ


p3452

5 копеек...
Лучше если у пользователя будет возможность выбирать новый компонент(деталь, сборку) из готового списка (надо этот список библиотечных элементов сформировать и показать пользователю).

biomotor

p3452, знаю, уже пытаюсь что-то сделать.
Для начала и это уже неплохо.... хоть как-то заменить можно.

Умка

Неплохо! Для питона 2.6 можно сварганить?

biomotor

#6
Умка, вообще можно, но я неверное не буду этого делать.
питон разный и придется исправлять и подгонять, а времени особо нет.
а какой питон, 2.6.0 или 2.6.7 ?

Умка

питон 2.6.2 на нём много хороших скриптов.

Михаил88

Можно так сделать со списком
https://yadi.sk/d/p-CpHKSea8N-ZA

В папке где находится файл с программой(test_Library.pyw) создаем папку Detail.
Выгружаем все из библиотеки kle в папку Detail.
1.png
Запускаем программу. Получаем listbox со всеми деталями из библиотеки.
Выбираем в сборке библиотечные детали, которые нужно заменить. В listboxe выделяем строку с нужной деталью и 2 раза щелкаем левой кнопкой мыши.
Происходит замена.

Если структура библиотеки kle разветвленная то удобнее вместо listbox использовать treeview

biomotor

Михаил88, а можно дописать программу и будет приблизительно так...
(и к слову, распаковывать весь архив чтобы вывести содержимое нет смысла, потому что все файлы будут в куче,
достаточно распаковать файл 'FileInfo.ru' и вывести его содержимое должным образом.)
Screenshot_1.jpg

biomotor

Умка, а если упаковать программу в .exe файл с помощью nuitka или pyinstaller то можно будет запускать независимо от того какой python стоит в OS, главное чтобы сама OS поддерживала этот python.

Михаил88

biomotor, если распаковать kle , как я показал на скриншоте то структура полностью сохранится. С файла FileInfo.ru думаю тоже можно достать ту же инфу.

Михаил88

то что у вас показано на скриншоте тоже можно сделать через treeview
изображение_2021-06-18_113503.png

вот так можно сделать

biomotor

#13
Михаил88, то что у меня на скриншоте уже сделано через treeview...
(где же Вы были раньше?)

biomotor


Умка


Михаил88

biomotor, пока не получится посмотреть в процессе разработки, но она немного для других целей. Спрашивайте если, что то интересует.

biomotor

Михаил88, интересует код на отображение иконок, и на окно предпросмотра. долго махаетесь с ней?

p3452

Цитата: Умка от 18.06.21, 12:11:53Всё-же лучше оное упаковать в exe.
На ЭТОМ, обычно, и заканчивается "любовь" к Python :angel:

Михаил88

biomotor, при вставке строки в treeview можно передать параметр image
справа в label вставляется тот же рисунок.
Если надо могу сделать пример?
При выборе строки в tree в label будет показываться нужный рисунок