Массовое применение свойств

Автор ja49619, 25.02.24, 17:18:45

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

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

ja49619

Здравствуйте,

Задача: изменить свойства "разработал, проверил, утвердил" у 200 шт. 3D моделей.

Как это сделать с одной открытой моделью я разобрался с помощью iPropertyMng.GetProperty и iPropertyKeeper.SetPropertyValue.
Соответственно модель была предварительно открыта в Компасе и выбрана с помощью iKompasDocument = app.ActiveDocument.

Вопрос: возможно ли применить скрипт рекурсивно сразу ко всем файлам m3d и a3d в папке, не открывая сам Компас?

Прошу указать направление ответа или примерный код

DUXOTA

Можете показать, где такие строки находятся в 3д модели
Имеется код для чертежей
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT

#  Получи константы
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants

#  Получи API интерфейсов версии 5
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))

#  Получи API интерфейсов версии 7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Получи интерфейс активного документа
kompas_document = application.ActiveDocument

#  Отредактируй ячейки основной надписи на листе 1
layout_sheets = kompas_document.LayoutSheets
layout_sheet = layout_sheets.Item(0)
stamp = layout_sheet.Stamp
text = stamp.Text(112)
text.Str = "Его пездюк"
text = stamp.Text(2)
text.Str = "ИГО 000,000,000,00"
text = stamp.Text(110)
text.Str = "Романов"
text = stamp.Text(111)
text.Str = "Насяльника"
stamp.Update()
Впервые встречаюсь с таким, возможно вы про свойства модели?
IPart.marking - Обозначение компонента
IPart.name - Имя детали или подсборки в составе сборки
IPart.useColor - Используемый цвет (цвет источника, цвет хозяина, собственный цвет)
IPart.SetAdvancedColor - Установить параметры цвета и визуальных свойств объекта
iPart.Standard - Редактирование стандартной колонки

Toptotal

Цитата: ja49619 от 25.02.24, 17:18:45Задача: изменить свойства "разработал, проверил, утвердил" у 200 шт. 3D моделей

Total commander +kompas3d плагин! не чего удобней и лучше нету, так как кроме этого и шаблоны и переименование.

DUXOTA

Цитата: Toptotal от 26.02.24, 03:06:01Total commander +kompas3d плагин! не чего удобней и лучше нету, так как кроме этого и шаблоны и переименование.
Достояние предков, которое не ценят нынешние программисты, и никакие простецкие макросы не нужны)

Slaviation

Не открывая сам КОМПАС-3D изменить свойства "разработал, проверил, утвердил" у 200 шт. 3D моделей можно, редактируя файл MetaProductInfo , находящийся внутри файла m3d или a3d. Это можно сделать или программно, или плагином, упомянутым Toptotal, или вручную.

Установку этих свойств через API можно существенно ускорить, используя метод
IKompasDocument1::ReportPropertiesMultieditMode. (Включить/Выключить режим массовой работы со свойствами объектов), но в этом случае каждый документ придется открывать в КОМПАС-3D.

Ссылка на плагин есть тут
https://slaviationsoft.blogspot.com/

Вират Лакх

ReportPropertiesMultieditMode относится же к документу? Значит, для каждого документа включать [и отключать]. Из-за трёх свойств может и смысла нет.
Интересно узнать, какой способ окажется быстрее, если компас не старый, где макросы тормознуто работают. Просто документы открывать в невидимом режиме.

Цитата: Slaviation от 26.02.24, 08:36:32Ссылка на плагин есть тут
Виндозный антивирусник ругается на K3D_TC_WdxPlugin-4.0.5.36-setup.exe

Slaviation

ЦитироватьВиндозный антивирусник ругается на K3D_TC_WdxPlugin-4.0.5.36-setup.exe
Известно.
https://online396.drweb.com/cache/?i=2abed0301732236a692f42268b5f80fc

Toptotal

#7
Цитата: DUXOTA от 26.02.24, 03:35:59Достояние предков, которое не ценят нынешние программисты, и никакие простецкие макросы не нужны)
ТС сам по себе полноценная система для сапр рзных и просмотр и корекция данных . SW? Kompas и любая др написал плагин под что хочешь..
Кроме заполнения данных, поиск,сортировка, выделение, передача в Ексель и тд.
+ Благодарностей: 1

lavgirb

Цитата: Toptotal от 26.02.24, 16:42:48ТС сам по себе полноценная система для сапр рзных и просмотр и корекция данных . SW? Kompas и любая др написал плагин под что хочешь..
Кроме заполнения данных, поиск,сортировка, выделение, передача в Ексель и тд. Так что задротной молодежи стоило бы поучится у старой гвардии опытом и примерами, чем писать всякие мелкие макросы для сию минутного действия , применять это для файлов в разных дисках и папках замучаетесь.
Кроме этого смитри mPDM  / StreamPDM  для полётностью понимания совместимости и передачи данных.

На работе Total Commander в списке разрешенных отсутствует.
А Duble Commander есть. Его и пользуем.

Toptotal

#9
Цитата: lavgirb от 26.02.24, 17:54:13На работе Total Commander в списке разрешенных отсутствует.
Причина ? 20$ вообще то он бесплатен условно если не для бизнеса.  Да и еще до 200к ворованного софта уголовка, но вряли Солид и виндовс с офисом и автогадом лицензированны!!!  Думаю типа а зачем нам платный файловый менеджер есть юже бесплатный.. плагины 1/3 которые не работают в дабл.. а зачем плагины , вам же файловый менеджер про плагины не понять тем кто не умеет работать. а вопрос дополнительно не ответите просмотр пдф, и другие просмотрощики все бесплатно? Офис файлов и еще 600 форматов что смотрит uLister.wlx ???  все лицензировано??? Поменьше на вашей работе админов придурков!
Вместо кучи слов вот на фото пример, сможет кто то так сделать и чем? Поясню мне среди десятка папок и всего 616 файлов найти только файлы  у который в обозначении 152 начинаются.. фото гифка для понимании.
Кто то может такое сделать для Компаса и Солида ? У меня работает и там и там. Есть альтернативы? Настолько полезная вещь, прям не знаю как люди работают, я и по другим могу полям также. Не по имени файла, и это не поиск он тоже прекрасен, а просто найти куда кликнуть быстро или собрать файлы..
Сделайте чтоб фаил выложить большего размера чем 2 мб!!!  1,7мб  фаил гифку не вставить!
+ Благодарностей: 1

Toptotal

#10
Вот
Цитата: Slaviation от 26.02.24, 08:36:32редактируя файл MetaProductInfo , находящийся внутри файла m3d или a3d
а где можно почиать что за что отвечает из этого файла?

Вират Лакх

#11
Я - молодежь, пишу мелкие макросы, не использую тотал и плагин к нему.
+ Благодарностей: 1

Toptotal

Цитата: Вират Лакх от 27.02.24, 10:30:15Я - молодежь, пишу мелкие макросы,
Извините молодежь, отредактировать не могу...
Но мне тоже не понравилрсь что то про "достояние предков". ТС кстати на днях вышла новая версия 11.03, да программой я пользуюсь с 1996года.. программа старших многих тут пользователей.
==February 21, 2024: Total Commander 11.03 (32+64 bit) for Windows available===
 И как мелкими макросами 200 файлы разом изменить?

Вират Лакх

#13
Цитата: ja49619 от 25.02.24, 17:18:45Вопрос: возможно ли применить скрипт рекурсивно сразу ко всем файлам m3d и a3d в папке, не открывая сам Компас?
Прошу указать направление ответа или примерный код
Способ через "открывая компас" (количество строк по пальцам пересчитать, включая одну ногу):
Импорт необходимых библиотек / функций: gencache, pythoncom, glob - 2 строки.
Библиотека типов API7 - 1 строка.
Создаёте новый экземпляр компаса через CoCreateInstance или цепляетесь к существующему через connect, обернув в соответствующий класс - 1 строка.
iDocuments и iPropertyMng - 2 строки.
Цикл for по списку всех файлов моделей папки glob.glob(f'{directory}**\\*.?3d', recursive = True) - 1 строка.
Открыл файл iKompasDocument - 1 строка.
iPropertyKeeper = api7.IPropertyKeeper(api7.IKompasDocument3D(iKompasDocument).TopPart) - 1 строка.
iPropertyKeeper.SetPropertyValue(iPropertyMng.GetProperty(iKompasDocument, 21.0), "Вася", True) - 3 строки: 21.0 Разработал, 22.0 Проверил, 23.0 Утвердил
Закрыл с сохранением Close(1) - 1 строка.
Плюс всякие необязательные проверки и запрос папки для обработки - пару строк.
Цитата: Toptotal от 27.02.24, 11:39:19программа старших многих тут пользователей
Уважаемый тотал, ваш тотал без плагина от ув. Slaviation, который, кстати, работал с версиями всего лишь от v16, а сейчас в требованиях от v20, никто и звать никак для компасных файлов, обычный коммандер, хоть дабл, хоть просто виндозное окно.
+ Благодарностей: 1

ja49619

#14
Цитата: DUXOTA от 25.02.24, 19:28:30Впервые встречаюсь с таким, возможно вы про свойства модели?
Да, я же так и написал про модели. Чертежи всегда должны брать все свойства с моделей

Цитата: Toptotal от 26.02.24, 03:06:01Total commander +kompas3d плагин! не чего удобней и лучше нету, так как кроме этого и шаблоны и переименование.
Решил попробовать, но так и не получил ключ регистрации ни на программу PyKompasMacro ни на плагин K3D_TC_WdxPlugin

Цитата: Вират Лакх от 27.02.24, 12:35:29Способ через "открывая компас" (количество строк по пальцам пересчитать, включая одну ногу):
Спасибо, друг, за алгоритм и подсказки,
вот код, который у меня получился с твоей помощью:

import glob, win32com.client, KompasAPI7

directory = "D:\\WORK\\for_test"
properties = {
              "Разработал": "111",
              "Проверил": "222",
              "Т. контр.": "333",
              "Н. контр.": "444",
              "Утвердил": "555",
              }

app = win32com.client.Dispatch('Kompas.Application.7')
IDocuments = app.Documents
IPropertyMng = KompasAPI7.IPropertyMng(app)

file_paths = glob.glob(f'{directory}/**/*.?3d', recursive=True)
if file_paths:
    for file_path in file_paths:
        IDocuments.Open(file_path, False, False)
        IKompasDocument = app.ActiveDocument
        IPropertyKeeper = KompasAPI7.IPropertyKeeper(KompasAPI7.IKompasDocument3D(IKompasDocument).TopPart)
        for key, value in properties.items():
            IPropertyKeeper.SetPropertyValue(IPropertyMng.GetProperty(IKompasDocument, key), value, True)
        IKompasDocument.Close(1)


С помощью кода назначенные свойства применились рекурсивно в папке к 204 моделям примерно за 2 минуты, Ryzen 5 5500, DDR-4 16 Gb

Результатом супердоволен

Вират Лакх

IDocuments.Open возвращает интерфейс IKompasDocument. ActiveDocument не нужен.

lavgirb

Цитата: Toptotal от 26.02.24, 17:59:32Причина ?...
Не знаю.
Ув. Toptotal, к сожалению, со своим тотал коммандер уставом в чужой монастырь не ходят.
Извиняюсь за оффтоп

lavgirb

Цитата: ja49619 от 27.02.24, 20:50:46...Чертежи всегда должны брать все свойства с моделей...
ja49619, не всегда.
При коллективной работе модели могут делать одни конструкторы, а чертежи оформлять - другие.
И фамилии в моделях и чертежах в этом случае не должны совпадать.

Slaviation

Добрый день.
ЦитироватьРешил попробовать, но так и не получил ключ регистрации ни на программу PyKompasMacro ни на плагин K3D_TC_WdxPlugin
Когда были письма?

Toptotal

Цитата: ja49619 от 27.02.24, 20:50:46рекурсивно в папке к 204 моделям примерно за 2 минуты, Ryzen 5 5500, DDR-4 16 Gb
А если в разных папках ? у меня многие узлы разбиты на разные папки, типа валы, шестерни..