KSaver

Автор dimak222, 27.01.23, 08:15:16

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

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

dimak222

Добрый день!

Написал программу (на Python) "KSaver" для сохранения документов КОМПАСа в старые версии. Работает с КОМПАС v21 и предыдущими версиями.

Что умеет:
1. Сохранять текущий открытый/открытые файлы, в "одиночном" и "массовом" (все открытые файлы) режиме.
2. Если неоткрыт документ или документ неактивен (нажат домик), предлагает массовое сохранение из папки.
3. Возможность задавать настройки (версия сохранения; откуда брать файлы; куда сохранять) каждый раз при запуске или записать их в txt файл.
4. Имеет основные опции (задаются в txt файле): "model_name" - брать обозначение и наименование из модели;
        "mass_saving" - включение/выключение опции массового сохранения (для открытых файлов);
        "file_version" - версия в какую сохранять файл;
        "types_of_documents" - типы документов для обработки;
        "***_directory" - путь к папкам открытия/сохранения документов;
        .... и т.д.
5. В случае невозможности сохранения, выдаёт сообщение о открытии или создания списка этих файлов.
6. В случае невозможности открытия, выдаёт сообщение, о создании списка этих файлов.

В планах:
1. Сделать быстрое открытие в КОМПАС v21 (по аналогии как открытие перетаскиванием "BeginDragOpenFiles", если есть пример, буду очень благодарен).
2. Добавить сохранение в другие форматы.
3. Добавить опцию сохранения дет./подсборок из открытой СБ.
4. Сделать интерфейс.

P.S. Приложение работает с txt файлом расположенном радом с ним, можно сохранить приложение и txt файл с разными настройками в разные папки и создать ярлык на приложение.
P.S.S Во вложение не влазит, архив будет из 2-х частей.
+ Благодарностей: 3

dimak222

Вторая часть архива.
+ Благодарностей: 2

Валерий Изранов

dimak222, а для России будет вариант программы с русским именем?

Сейчас многие используют Яндекс Диск. !0 Гб бесплатно. Сюда только ссылку.

dimak222

Цитата: Валерий Изранов от 27.01.23, 12:16:46dimak222, а для России будет вариант программы с русским именем?
Изначально было "Сохранение в старые версии", но звучит не очень, да и ещё планирую добавить сохранение в другие форматы, так что решил так назвать.
В свойствах файла, есть описание со старым названием=)

Цитата: Валерий Изранов от 27.01.23, 12:16:46Сейчас многие используют Яндекс Диск. !0 Гб бесплатно. Сюда только ссылку.
Тоже думал насчёт этого, но тут оно останется пока работает форум. А на диске могу и ненароком удалить... Конечно могу продублировать если будет полезно.

Валерий Изранов

Юнец (совсем начинающий),Кадет(уже слегка подросший)и множество других нейтральных имен...
Отвлекись и подумай. Мысли придут.

Toptotal

Цитата: Валерий Изранов от 27.01.23, 12:16:46Сейчас многие используют Яндекс Диск. !0 Гб бесплатно. Сюда только ссылку.
Если не знаете то можно сделать хоть 1000гб бесплатно.
Регите 10 разных почт и подключате в настройках все по максимум.
в ТС есть плагин WebDav прописываете пароли там и одним кликом прям попадаете на яндекс диски, и в быстром меню или на бар делает ссылку перескакиваете мгновенно туда, без каких либо вводов паролей и тд они все в настройке один раз делаются.. быстрый просмотр от туда работает тоже !!!!
Оч удобно!

mikor

К сожалению, архив распаковать не удалось, просит KSaver v1.3.3.z01.
В качестве пожелания, в первую очередь, конечно прошу интерфейс и сохранение в PDF.

Алексей Дубовицкий

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

Doom

Интересно, а можно ли использовать разные окружения в которых хранятся соответствующие библиотеки Компаса ?

dimak222

Цитата: Doom от 01.02.23, 15:47:28Интересно, а можно ли использовать разные окружения в которых хранятся соответствующие библиотеки Компаса ?
Сложно, я не понял вопроса=) Да и скорее всего подсказать не смогу, кроме Python ни на чём не писал...

P.S. Если смотрю за темой по потокам, если будет вариант решения, прошу отписаться=)

Вират Лакх

Цитата: dimak222 от 01.02.23, 15:55:41P.S. Если смотрю за темой по потокам, если будет вариант решения, прошу отписаться=)
На сколько я понимаю, у Sabahs параллельность была реализована просто запуском нескольких экземпляров Компаса?
Типа берем список файлов, делим на заданное количество компасов и обрабатываем...

dimak222

Цитата: Вират Лакх от 02.02.23, 10:10:46На сколько я понимаю, у Sabahs параллельность была реализована просто запуском нескольких экземпляров Компаса?
Хммм, возможно и так. Просто, я не пробовал подключиться ко второму экземпляру КОМПАСа, если запустить два экземпляра, автоматом подключиться к первому.
Ну и по опыту случайного открытия двух экземпляров, КОМПАС часто ломается, то при закрытии КОМПАСа ругается на изменения файлов другой программой (...\AppData\Roaming\ASCON\KOMPAS-3D\XX\KOMPAS.prj и KOMPAS.cfg), то шрифты ТТ становиться длиннее (лечиться выключением/включением компа). Конечно не факт что будет повторяться, надо пробовать.

Есть идеи как подключаться к другим экземплярам?

Вират Лакх

Не надо к ним подключаться, их надо создавать, работать с ними и закрывать. Для создания используем DispatchEx. Он возвращает интерфейс - и поехали.
+ Благодарностей: 1

dimak222

Цитата: Вират Лакх от 02.02.23, 11:57:14Для создания используем DispatchEx
Уумммм, спасибо! Буду пробовать=)

Doom

Цитата: dimak222 от 01.02.23, 15:55:41Сложно, я не понял вопроса=) Да и скорее всего подсказать не смогу, кроме Python ни на чём не писал...

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


# определить версию нужно как то и иначе
Get_Ver_Kompas = iKompasObject.ksGetSystemVersion()

match Get_Ver_Kompas:
    case "14":
        sys.path.append(r'C:\Python38x32\KompasModuleFor14')

    case "15":
        sys.path.append(r'C:\Python38x32\KompasModuleFor15')

    case "16":
        sys.path.append(r'C:\Python38x32\KompasModuleFor16')

    case :
        messagebox.showinfo("error", "Не обнаружена соответствующая версия Компас -3D")


далее идет код соответствующей версии..

Doom

Цитата: Вират Лакх от 02.02.23, 10:10:46На сколько я понимаю, у Sabahs параллельность была реализована просто запуском нескольких экземпляров Компаса?

видимо так и есть - но доступа я так не нашел пока + не как не могу получить доступ к объекту Компаса из авто запускаемой библиотеки что бы передать его своему приложению.

Цитата: Вират Лакх от 02.02.23, 11:57:14Для создания используем DispatchEx.

не совсем понятно как с ним работать
def Dispatch(
    dispatch,
    userName=None,
    resultCLSID=None,
    typeinfo=None,
    UnicodeToString=None,
    clsctx=pythoncom.CLSCTX_SERVER,
):


def DispatchEx(
    clsid,
    machine=None,
    userName=None,
    resultCLSID=None,
    typeinfo=None,
    UnicodeToString=None,
    clsctx=None,
):

dimak222

Цитата: Doom от 02.02.23, 15:38:42я имел ввиду что у пользователя данной утилиты мб установлена другая версия Компаса и как тогда с ним работать ?
Я подключаюсь к открытому/открываю программно (когда компас зарегистрирован правильно, он при подключении сам открывается) через Dispatch, дальше, при необходимости, узнаю версию у самого КОМПАСа.
from win32com.client import Dispatch, gencache # библиотека API Windows

KompasAPI5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0) # API5 КОМПАСа
iKompasObject = Dispatch('Kompas.Application.5', None, KompasAPI5.KompasObject.CLSID) # интерфейс API КОМПАС

iKompasVersion = iKompasObject.ksGetSystemVersion() # текущая версия компаса
iKompasVersion = iKompasVersion[1] + iKompasVersion[2]*0.1 # разбиваем полученое значение на обычную запись (19.0)

print(iKompasVersion)

Doom

а может быть такое что одна и таже функция по разному реализована в модулях ?
и что бы это все не отслеживать просто закинуть соответствующие и готово..

Doom

#18
в мануале написано DispatchEx решает проблему многопоточности..

у Sabahs утилита написана на Delphi + он ее так хорошо запаковал что ее скажем так не изучить)))

я почему то уверен что Компас поддерживает командную строку - запустив с аргументами и забыл про него.. (тк он писал что есть ряд не задокументированных функций)

Цитата: dimak222 от 02.02.23, 11:41:53КОМПАСа ругается на изменения файлов другой программой
тут два варианта 1) я думал что у Компаса есть debug профиль запуска который хранит все переменные файлы гдето в темр - у многих программ видел такой профиль
+ CreateProcess в аргументах есть поддержка переноса файлов например в тот же temp папку потом автоматом очищается.

2) сообщениям говорить - нет.


Doom

Вират Лакх, спасибо!

работает  :-)))

import Kompas10API5 as KAPI
import Kompas10API7 as KAPI7
import pythoncom
from win32com.client import DispatchEx, gencache
import LDefin2D
import LDefin3D
import ksConstants as CONST2D7
import ksConstants3D as CONST3D7
import MiscellaneousHelpers as MH

def runApp():

    KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
    iKompasObject = KAPI.KompasObject(DispatchEx("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))
    MH.iKompasObject = iKompasObject

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

    iApplication.Visible = True

    return (KAPI, KAPI7, iKompasObject, iApplication)


KAPI_0, KAPI7_0, iKompasObject_0, iApplication_0 = runApp()
KAPI_1, KAPI7_1, iKompasObject_1, iApplication_1 = runApp()

Documents_0 = iApplication_0.Documents
Documents_1 = iApplication_1.Documents

kompas_document_0 = Documents_0.Open(r"G:\temp\file1.cdw", True, False)
kompas_document_1 = Documents_1.Open(r"G:\temp\file2.cdw", True, False)
+ Благодарностей: 2