KompasStamp - программа группового изменения основной надписи

Автор Andreych, 17.11.24, 10:42:21

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

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

Lemieux

Цитата: feron от 26.11.24, 09:25:44И это на фоне того что FreeCad получила и прошла 1.0 версию.
Вы работали в этом FreeCAD?

feron

Цитата: Lemieux от 26.11.24, 09:35:59Вы работали в этом FreeCAD?
Конечно!

Говоря о нем есть еще куда больше подобных программ..  Я написал скрипт который ищет каналы по названиям заводов РФ там я встретил много инженеров которые имеют свои каналы на ютубе где они ведут обзоры на своим инструменты моделирования и черчения я об их существовании не догадывался..

Я на авито лет 5 услуги постил и спросу как кот наплакал поэтому я сменил курс на зарубежный и в течении этих 2 лет изучаю зарубежные стандарты и язык.. я думаю дело на рынке - жареным запахло мб за рубежом будет спрос..
Поэтому тут и писал раза два три что и Компасу пора зарубежные стандарты изучать.


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

feron

Цитата: Lemieux от 26.11.24, 09:35:59Вы работали в этом FreeCAD?
"жить захочешь и не так раскорячишься такое изучишь"

У Вас был сон когда вы спите а спину Вам пилят пилой ? это новый день настал   ;)

Andreych

Обновленная версия программы. Добавлен групповой экспорт чертежей и моделей в разные форматы, а не только в PDF. Понадобилось как-то экспортировать много чертежей сразу в несколько форматов, вот и пришлось сделать инструмент.



KompasStamp 1.17 - https://disk.yandex.ru/d/qZLIo_8mfUXk9g
+ Благодарностей: 7

mikor

Цитата: Andreych от 22.04.25, 20:44:47Обновленная версия программы.
А можно добавить опцию, чтобы произвольную картинку вставлять непрозрачную? Нужно в готовые pdf (делалось не в Компасе) вставить даты новые. В pdf стоит неправильная дата. При вставке картинки неправильная дата "просвечивает" через вставленную картинку.

dimak222

Отличное обновление!

Что обнаружил:
  • При сохранении 3D моделей, сохраняет исполнение открываемое по умолчанию (последнее открытое при сохранении). Возможно стоит сохранять все или как-то предупреждать что оно не одно?
  • При открытом 3D файле экспорт не происходит, но в 3D PDF (кнопка F6) сохраняет.
  • Экспорт в "Предыдущая" версию, сохраняет в v16.1 вместо ("-1" от v21 => v20).
  • Непонятный квадратик на иконке экспорта и чуть не вмещается надпись в окне экспорта (см. Рис. 1).

Andreych

Цитата: mikor от 29.04.25, 15:24:54А можно добавить опцию, чтобы произвольную картинку вставлять непрозрачную? Нужно в готовые pdf (делалось не в Компасе) вставить даты новые. В pdf стоит неправильная дата. При вставке картинки неправильная дата "просвечивает" через вставленную картинку.

К сожалению, не получается. Дело в том, что компонент, который используется для редактирования PDF, вставляет картинку (и так непрозрачную) позади всех текстов и линий. И не дает возможности перенести эту картинку на передний план.

Andreych

Цитата: dimak222 от 29.04.25, 16:41:47
  • При сохранении 3D моделей, сохраняет исполнение открываемое по умолчанию (последнее открытое при сохранении). Возможно стоит сохранять все или как-то предупреждать что оно не одно?
  • При открытом 3D файле экспорт не происходит, но в 3D PDF (кнопка F6) сохраняет.
  • Экспорт в "Предыдущая" версию, сохраняет в v16.1 вместо ("-1" от v21 => v20).
  • Непонятный квадратик на иконке экспорта и чуть не вмещается надпись в окне экспорта (см. Рис. 1).

1. Да, сохраняется текущее исполнение, точно так же как вручную из Компаса, там не предоставляется выбор.
2. Да, лучше чтобы вообще во время работы программы в Компасе ничего открыто не было. Программа задумывалась для работы без открытого Компаса.
3. Тут странно. Я не проверял, делаю все как в справке SDK. Функция ksSaveDocumentEx с параметром -1 должна сохранять именно в предыдущую версию. Почему это не работает я не знаю.
4. Меня тоже смущал этот квадратик, но это сама иконка такая. Это единственный пункт, где я могу все поправить. :)

dimak222

Цитата: Andreych от 29.04.25, 21:36:411. Да, сохраняется текущее исполнение, точно так же как вручную из Компаса, там не предоставляется выбор.
Ну в целом вручную есть 2 варианта:
  • "Сохранить исполнение как..." (см. Рис. 1);
  • Выбрать нужное исполнение и "Сохранить как..." (классический вариант).
Вот как раз по 2-му варианту я делал сохранение, пример на Python сохраняет в stp, если добавить опцию сохранения всех исп. то можно сохранять так:
import pythoncom # модуль для запуска без IDE
from win32com.client import Dispatch, gencache # библиотека API Windows

def read_name_and_obozn(iKompasDocument3D): # считывание обозначение и наименование 3D модели

    iPart7 = iKompasDocument3D.TopPart # интерфейс компонента 3D документа (сам документ)

    iMarking = iPart7.Marking # обознаяение файла
    iName = iPart7.Name # наименование файла

    name_and_obozn = "_".join(filter(None, [iMarking, iName])) # обозначение и имя файла

    return name_and_obozn # возврящаем значения

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

KompasAPI7 = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0) # API7 КОМПАСа
iApplication = Dispatch("Kompas.Application.7") # интерфейс приложения КОМПАС-3D.

save_all_embodiment = True # сохранять все исп.

iKompasDocument = iApplication.ActiveDocument # получить текущий активный документ

if iKompasDocument: # если есть октрытый документ

    iKompasDocument3D = KompasAPI7.IKompasDocument3D(iKompasDocument) # базовый класс документов-моделей КОМПАС
    iPart7 = iKompasDocument3D.TopPart # интерфейс компонента 3D документа
    iEmbodimentsManager = KompasAPI7.IEmbodimentsManager(iPart7) # интерфейс менеджера исполнений

    iEmbodimentCount = iEmbodimentsManager.EmbodimentCount # кол-во исполнений

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

    iAdditionFormatParam = iDocument3D.AdditionFormatParam() # интерфейс параметров сохранения модели IAdditionFormatParam
    iAdditionFormatParam.Init() # старт инициализации параметров
    iAdditionFormatParam.format = 3  # 1 - SAT; 2 - X_T; 3 - STEP; 4 - IGES; 5 - VRML; 6 - STL; 8 - JT; (с "-" для открытия документов, пример: -6); 203 - STEP203; 214 - STEP214; 242 - STEP242
                                             # для открытия док-тов: 100 - NX; 101 - CREO; 102 - SolidWorks; 103 - Inventor; 104 - Catia; 105 - SolidEdge;
    iAdditionFormatParam.formatBinary = True  # true - бинарный (двоичный) формат, false - текстовый формат
    iAdditionFormatParam.lengthUnits = 4 # единицы измерения длины: 0 - см; 1 - мм; 2 - дм; 3 - м; 4 - настройки док-та (см. ksLengthUnitsEnum)
    iAdditionFormatParam.SetObjectsOptions(16, True) # установить признак чтения\записи размеров (см. ksD3ConverterOptionsEnum)

    iPath = iKompasDocument.Path # папка с файлом

    if iPath == "": # если файл не сохранён
        print("Необходимо сохранить файл!")

    else:

        if iEmbodimentCount > 1: # если исполнений больше 1-го
            print("Обнаружены исполнения!")

            if save_all_embodiment: # если включена опция сохранения исп.

                for embodiment in range(0, iEmbodimentCount): # перебор исп.

                    iSetCurrentEmbodiment = iEmbodimentsManager.SetCurrentEmbodiment(embodiment) # устанавливаем исп.

                    name_and_obozn = read_name_and_obozn(iKompasDocument3D) # считывание обозначение и наименование 3D модели

                    iSaveAsToAdditionFormat = iDocument3D.SaveAsToAdditionFormat(f"{iPath}{name_and_obozn}.stp", iAdditionFormatParam) # сохранение документа в выбранный формат

                    if iSaveAsToAdditionFormat: # если сохранён файл
                        print(f"Файл сохранён: {iPath}{name_and_obozn}.stp")

                    else:
                        print(f"Файл не сохранён: {iPath}{name_and_obozn}.stp")

            else: # сохраняем нулевое исп.

                iCurrentEmbodimentIndex = iEmbodimentsManager.CurrentEmbodimentIndex # получаем индекс текущего исполнения

                if iCurrentEmbodimentIndex != 0: # если текущее исп. отличаеться от нулевого
                    iSetCurrentEmbodiment = iEmbodimentsManager.SetCurrentEmbodiment(0) # устанавливаем исп.

                name_and_obozn = read_name_and_obozn(iKompasDocument3D) # считывание обозначение и наименование 3D модели

                iSaveAsToAdditionFormat = iDocument3D.SaveAsToAdditionFormat(f"{iPath}{name_and_obozn}.stp", iAdditionFormatParam) # сохранение документа в выбранный формат

                if iSaveAsToAdditionFormat: # если сохранён файл
                    print(f"Файл сохранён: {iPath}{name_and_obozn}.stp")

                else:
                    print(f"Файл не сохранён: {iPath}{name_and_obozn}.stp")

        else: # если нет исп.

            name_and_obozn = read_name_and_obozn(iKompasDocument3D) # считывание обозначение и наименование 3D модели

            iSaveAsToAdditionFormat = iDocument3D.SaveAsToAdditionFormat(f"{iPath}{name_and_obozn}.stp", iAdditionFormatParam) # сохранение документа в выбранный формат

            if iSaveAsToAdditionFormat: # если сохранён файл
                print(f"Файл сохранён: {iPath}{name_and_obozn}.stp")

            else:
                print(f"Файл не сохранён: {iPath}{name_and_obozn}.stp")

Цитата: Andreych от 29.04.25, 21:36:412. Да, лучше чтобы вообще во время работы программы в Компасе ничего открыто не было. Программа задумывалась для работы без открытого Компаса.
Ага, понял, просто можно не заметить, что что-то было открыто.

Цитата: Andreych от 29.04.25, 21:36:413. Тут странно. Я не проверял, делаю все как в справке SDK. Функция ksSaveDocumentEx с параметром -1 должна сохранять именно в предыдущую версию. Почему это не работает я не знаю.
Вручную тоже проверил, похоже, это опять какие-то приколы КОМПАСа, можно, конечно, определять версию самого КОМПАСа и самому делать "-1", но это какой-то костыль, не должно быть такого...
iKompasVersion = iKompasObject.ksGetSystemVersion() # текущая версия компаса
iKompasVersion = iKompasVersion[1] + iKompasVersion[2]*0.1 # разбиваем полученое значение на обычную запись (19.0)

lavgirb

Цитата: Andreych от 29.04.25, 21:36:412. Да, лучше чтобы вообще во время работы программы в Компасе ничего открыто не было...
Можно сделать проверку и сообщить, что есть открытые документы и предложить их выгрузить.
Пусть пользователь сам решит, что ему сейчас лучше.
1 Может захочет и не работать с программой сейчас, а поработать с документами еще. Как вариант, откажется от работы программы.
2 Или захочет оставить как есть и не выгружать. По какой-то причине.
3 Или выберет выгрузить и продолжить работу с программой с без открытых документов.

andrei260

Здравствуйте, а можно сделать так, чтобы программа сохраняла файлы в заданную пользователем папку, отличную от места хранения чертежей?