Обновить (перестроить) чертежи деталей, участвующих в сборке.

Автор sishon, 26.02.25, 06:35:18

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

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

sishon

Если я внес изменения в какие-то детали сборки, как сделать макросом, расширением, приемом, чтобы чертежи деталей перестроились и сохранились?
Либо как открыть их не выбирая каждый?

VIO

Они у Вас или на другом компе будут перестраиваться при открытии, если есть ассоциативная связь.
 :angel:

sishon

Цитата: VIO от 26.02.25, 11:53:06Они у Вас или на другом компе будут перестраиваться при открытии, если есть ассоциативная связь.
 :angel:
У меня. Связи все есть.
Имеем сборку из 300 деталей, какие-то незначительно меняются. Либо в подсборках добавляются существующие детали. Достаточно обновить чертежи. Но вручную это надо сделать отчет и каждый открывать в ручную, долго и ошибки пропуска фатальны.
Нужен макрос, который открыл, перестроил и сохранил чертеж каждой детали, без пропусков.

p3452

Через ksKompasInvisible было бы самое быстрое...

p/s: А "макрос" - медленно и для самых простеньких сборок.

lavgirb

Цитата: sishon от 21.09.25, 20:36:23У меня. Связи все есть.
Имеем сборку из 300 деталей, какие-то незначительно меняются. Либо в подсборках добавляются существующие детали. Достаточно обновить чертежи. Но вручную это надо сделать отчет и каждый открывать в ручную, долго и ошибки пропуска фатальны.
Нужен макрос, который открыл, перестроил и сохранил чертеж каждой детали, без пропусков.
1 Если меняется деталь так, что меняется и ее чертеж, чертеж обязательно надо смотреть.
Вдруг размер отцепился и уже не соответствует действительности.

2 Если чертеж не открываете и не обновляете, он все равно запросит обновление при следующем открытии, например для печати.
Или Вы чертежи передаете без просмотра?

Если меняете деталь или подсборку, разве не логично сразу открыть чертеж и посмотреть, что получилось?
При такой работе Ваша проблема отпадает сама собой.



Doom2

Цитата: p3452 от 21.09.25, 22:57:11Через ksKompasInvisible было бы самое быстрое...
Пример ему приведите, а ту он опять на месяцы пропадет..

dimak222

Очень давно делал на Python, версия для перестроения чертежей, но можно чуть поправить и указать модели тоже.
Если в КОМПАСе открыты чертежи, перестраивает их, если нет открытых - предлагает указать папку с ними.

Вот exe файл этой программы, если потом ещё кому понадобится, может перезалью на другой ресурс без ограничения по времени.

#-------------------------------------------------------------------------------
# Author:      dimak222
#
# Created:     21.10.2021
# Copyright:   (c) dimak222 2021
# Licence:     No
#-------------------------------------------------------------------------------

title = "Открыть и перестроить" # наименование приложения
ver = "v1.2.0.0" # версия файла

#------------------------------Импорт модулей-----------------------------------

from sys import exit # для выхода из приложения без ошибки

import glob
from win32com.client import Dispatch, gencache
from tkinter import filedialog
import tkinter.messagebox as mb

#-------------------------------------------------------------------------------

def kompasAPI(): # подключение API компаса

    try: # попытаться подключиться к КОМПАСу

        global iApplication # значение делаем глобальным
        global iKompasObject # значение делаем глобальным
        global KompasConst # значение делаем глобальным

        KompasConst3D = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants # константа 3D документов
        KompasConst = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants # константа для скрытия вопросов перестроения и 2D документов

        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.

        if iApplication.Visible == False: # если компас невидимый
            iApplication.Visible = True # сделать КОМПАС-3D видемым

    except: # если не получилось подключиться к КОМПАСу
        msg = "КОМПАС-3D не найден!\nУстановите или переустановите КОМПАС-3D!"
        print(msg)
        mb.showinfo("Открыть и перестроить", msg) # сообщение, поверх всех окон с автоматическим закрытием
        exit() # выходим из программы

def update(): # функция для перестроения

    for files in expansion: # cоздаём цикл для работы с каждым чертежём
        iDocument = iDocuments.Open (files, False, False )# False - в невидимом режиме, False - с возможностью редактирования
        print(files)
        save()

def save(): # функция для сохраненния

    global det_cnt
    global SB_cnt
    global file_cnt
    global spc_cnt

    iDocument = iApplication.ActiveDocument
    iDocument3D = iKompasObject.ActiveDocument3D()

    if iDocument.DocumentType == 1: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument.Save()
        iDocument.Close(0)
        file_cnt = file_cnt + 1

    elif iDocument.DocumentType == 2: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument.Save()
        iDocument.Close(0)
        file_cnt = file_cnt + 1

    elif iDocument.DocumentType == 3: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument.Save()
        iDocument.Close(0)
        spc_cnt = spc_cnt + 1

    elif iDocument.DocumentType == 4: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument3D.RebuildDocument()
        iDocument.Save()
        iDocument.Close(0)
        det_cnt = det_cnt + 1

    elif iDocument.DocumentType == 5: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument3D.RebuildDocument()
        iDocument.Save()
        iDocument.Close(0)
        SB_cnt = SB_cnt + 1

    elif iDocument.DocumentType == 6: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument.Save()
        iDocument.Close(0)
        file_cnt = file_cnt + 1

    elif iDocument.DocumentType == 7: # 1-чертёж; 2- фрагмент; 3-спецификация; 4-модель; 5-сборка; 6-текстовый документ; 7-технологическая сборка;
        iDocument3D.RebuildDocument()
        iDocument.Save()
        iDocument.Close(0)
        SB_cnt = SB_cnt + 1

    else:
        iDocument.Close(0)

#-------------------------------------------------------------------------------

kompasAPI() # подключение API компаса

iDocument = iApplication.ActiveDocument

file_cnt = 0 #отчёт количества файлов (от 0-го файла)
spc_cnt = 0 #отчёт количества файлов спецификации (от 0-го файла)
det_cnt = 0 #отчёт количества деталей файлов (от 0-го файла)
SB_cnt = 0 #отчёт количества сборок файлов (от 0-го файла)

if iDocument: # если открыты документы выполнять макрос

    iApplication.HideMessage = KompasConst.ksHideMessageYes # скрыть сообщение перестроения

    while iDocument != None:

        save()

        iDocument = iApplication.ActiveDocument

    iApplication.HideMessage = KompasConst.ksShowMessage # показывать сообщение перестроения

    end_msg = "Все файлы перестроены и сохранены! \nВсего перестроено: \nДеталей:            " + str(det_cnt) + "\nСборок:            " + str(SB_cnt) + "\nЧертежей:         " + str(file_cnt) + "\nСпецификаций: " + str(spc_cnt)
    iApplication.MessageBoxEx( end_msg, "Сообщение", 64)

else:

    iDocuments = iApplication.Documents
    # Запрос указания папки
    directory = filedialog.askdirectory()
    if directory:

        # Получаем список всех файлов имеющихся в папке, отбирая только чертежи
        expansion1 = glob.glob(directory+"/**/*.m3d", recursive=True)
        expansion2 = glob.glob(directory+"/**/*.a3d", recursive=True)
        expansion3 = glob.glob(directory+"/**/*.spw", recursive=True)
        expansion4 = glob.glob(directory+"/**/*.cdw", recursive=True)
        expansion = expansion3 + expansion4

        if expansion:

            iApplication.HideMessage = KompasConst.ksHideMessageYes # скрыть сообщение перестроения

            update() # функция для перестроения

            iApplication.HideMessage = KompasConst.ksShowMessage # показывать сообщение перестроения

            end_msg = "Все файлы перестроены и сохранены! \nВсего перестроено: \nЧертежей:           " + str(file_cnt) + "\nСпецификаций: " + str(spc_cnt)
            mb.showinfo("Открыть и перестроить", end_msg)

        else: # если в папке нет чертежей, выдать ошибку
            msg = "В указанной папке нет чертежей!"
            mb.showerror("Открыть и перестроить", msg)
+ Благодарностей: 1

Doom2

Вижу к Spyder приобщились - хороший инструмент.

Стоп, просили же KSINVISIBLE..

Miroshnyk

Цитата: Doom2 от 22.09.25, 11:08:38Стоп, просили же KSINVISIBLE..
На ksKompasInvisible всё тоже самое, единственное, нужно лицензию подтвердить для его использования.
+ Благодарностей: 1