Утилита по присвоению наименования детали из значения переменных.

Автор pr0100, 04.02.19, 13:53:49

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

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

pr0100

По ссылке утилита, которая присваивает наименование детали используя данные переменных. Без использования линий выносок.
1 Необходима первоначальная настройка 3D модели. В файле модели необходимо создать переменную «NAME», иначе программа срабатывать не будет.
2 В поле комментария переменной «NAME» ввести данные, необходимые для получения наименования.
Пример. 3D модель содержит пользовательские переменные «a» и «b».
Необходимо в поле у комментария переменной NAME, переменные «a» и «b» заключить в фигурные скобки.
Пример. Пластина {a}x{b} мм.
Примечание, имена переменных заключенных в фигурные скобки, всегда должны соответствовать именам переменных, вплоть до регистра.
3 Для дальнейшего включения в спецификацию материала данной 3D модели, достаточно ввести в комментарий {MATERIAL} либо набрать текстом свой.
4 Используя возможные варианты. Существует возможность создания детали типа БЧ
Вводим в поле комментария переменной NAME: «Пластина {a}x{b} мм.@/ {MATERIAL}»
https://yadi.sk/d/aA6xZbZoSCKYGA
+ Благодарностей: 2

YNA

Есть подводный камень (глюк v18) который в некоторых случаях не позволит полноценно использовать эту утилиту.
Если создать деталь из сборки, (например преобразовать тело в деталь и т.п.) то параметр Комментарий в этой детали будет заблокирован и туда ни чего нельзя будет записать.
Ошибка зарегистрирована, скорее всего исправление появится в v18.1. Ждём. :)
+ Благодарностей: 1

Вират Лакх

Исходного кода не будет? С этими exe неудобно: большие размером, долго запускаются, когда глюки есть, их не отловить.
Короче, у меня программа не работает.

Kilia

Цитата: pr0100 от 04.02.19, 13:53:49
По ссылке утилита, которая присваивает наименование детали используя данные переменных. Без использования линий выносок.

Добрый день!
У меня к сожалению не запускается ваша утилита по присвоению наименования детали из значения переменных.=(
Есть идеи, что я делаю не так?

Toptotal

Ну а я переименовываю файлы Total commander -ром через инструмент ctrl+M и любой WDX плагин что для Компаса или Solidworks 2014.
Главное WDX чтоб читал данные файлы этого формата и версии.
На фото гифка По солиду, так как есть плагин который обмеривает фаил и записывает в свойства эти данные и по ним уже Тотал переименовыват.
Сделаейте для компаса такой макрос или прогу.

Переименование по значениям.gif

IgorT

Интересно, может кто доработать или сделать заново программу, которая прописывала бы в свойствах компонента сборки значения его внешних переменных, установленных для вхождения компонента в сборку?
Задача: Мы вставляем в сборку несколько раз деталь со внешними переменными. Для каждого вхождения устанавливает различные значения внешних переменных. Модель сборки замечательно перестраивается. Но увидеть в СП значения введённых внешних переменных для каждой детали не получается. Или я не знаю как.
Ну что, кому интересно?

p3452

Цитата: IgorT от 27.03.22, 16:08:23Задача: Мы вставляем в сборку несколько раз деталь со внешними переменными. Для каждого вхождения устанавливает различные значения внешних переменных. Модель сборки замечательно перестраивается. Но увидеть в СП значения введённых внешних переменных для каждой детали не получается.
Допустим, что есть 10 внешних переменных, Вы их все хотите видеть в Наименовании и в СП?
Уточните "хотелки"...

Р.S: "Утилиту" не видел, так что апеллировать к ней не стоит.

IgorT

Утилита пишет параметры детали в свойства  модели детали.

Собственно мотив хотелки: Достаёт работа с гидравликой. Их, гидравлических компонентов весь много и у каждого компонента, например штуцера (по научному адаптера) имеется ряд типоразмеров в соответствии с Ду. Сейчас они, компоненты, получены через степ от производителей (в основном) для конкретного Ду. При замене Ду в сборке теряются сопряжения и их надо переназначать. Занимает приличное время, так как наши сборки насыщены гидравликой. Попытки решить проблему исполнениями предпринимались, но получаются большие веса сборок и не очень удобно работать с исполнениями, когда их много. Есть вариант с использованием таблицы. Удобный вариант, но приходится в ручную прописывать типоразмер компонента в сборке. Может быть я не знаю как это сделать не использую руки?
Вот и явилась на идея макроса, который записывал в свойствах компонента в сборке например Ду штуцера, ориентируясь на выбранную строку в таблице параметров. Их может быть несколько, но нам нужен только Ду для помещения в СП.
ИМХО такой макрос может быть применён и для других задач.

Вират Лакх

#8
Макрос вроде вполне осуществим, только надо проработать вопрос соответствия конкретных внешних переменных конкретным деталям, т.е. от компонента выйти на именно его внешние переменные. Можете выложить упрощенный пример вашей сборки (пара разных "штуцеров" с их внешними переменными)? И самое интересное - предлагаемая цена вопроса.
upd.
От IPart7 получаем IFeature7, от которого получаем Variables( ExternalOnly = True, InSource = False). В массиве как-то находим, что конкретная переменная - это DN. А дальше дело техники. Если нужно перелопатить сборку на всю глубину - посложнее, если только текущую - попроще.

p3452

Цитата: IgorT от 28.03.22, 08:22:42Собственно мотив хотелки: Достаёт работа с гидравликой. Их, гидравлических компонентов весь много и у каждого компонента, например штуцера (по научному адаптера) имеется ряд типоразмеров в соответствии с Ду. Сейчас они, компоненты, получены через степ от производителей (в основном) для конкретного Ду. При замене Ду в сборке теряются сопряжения и их надо переназначать. Занимает приличное время, так как наши сборки насыщены гидравликой. Попытки решить проблему исполнениями предпринимались, но получаются большие веса сборок и не очень удобно работать с исполнениями, когда их много. Есть вариант с использованием таблицы. Удобный вариант, но приходится в ручную прописывать типоразмер компонента в сборке. Может быть я не знаю как это сделать не использую руки?
Вот и явилась на идея макроса, который записывал в свойствах компонента в сборке например Ду штуцера, ориентируясь на выбранную строку в таблице параметров. Их может быть несколько, но нам нужен только Ду для помещения в СП.
ИМХО такой макрос может быть применён и для других задач.

Яснее не стало!
Еще больше вопросов и масштаб задачи радикально меняется...

- Где и как хранятся "штуцеры" полученные "от производителя"?
- Как в НИХ появляются "свойства" и "переменные"?
- О какой "таблице" идет речь ("таблица переменных", таблица Компонет - база данных, или какая-либо другая "левая" (например Excel) таблица)?
- и т.д.

IgorT

Цитата: p3452 от 28.03.22, 14:09:24Яснее не стало!
Еще больше вопросов и масштаб задачи радикально меняется...

- Где и как хранятся "штуцеры" полученные "от производителя"?
...
Сейчас они хранятся кучей файлов моделей деталей Компаса, разложенных по папкам для каждого сортамента.

Цитата: p3452 от 28.03.22, 14:09:24...
- Как в НИХ появляются "свойства" и "переменные"?
...
Сейчас свойства "Наименование" прописывается врукопашную. В каждом файле модели.

Цитата: p3452 от 28.03.22, 14:09:24...
- О какой "таблице" идет речь ("таблица переменных", таблица Компонет - база данных, или какая-либо другая "левая" (например Excel) таблица)?
...
Таблице переменных.

p3452

Цитата: IgorT от 28.03.22, 14:15:29
Цитата: undefined...
- Как в НИХ появляются "свойства" и "переменные"?
...
Сейчас свойства "Наименование" прописывается врукопашную. В каждом файле модели.
Идем дальше...
Т.е. никаких НОВЫХ свойств не создаете, детали не параметризуете, а всего лишь, в Наименование прописываете Ду=XXX?
Тогда "переменные" из "таблицы переменных", что параметризуют (координаты точек вставки, Сопряжения или что-то еще)?

IgorT

Цитата: p3452 от 28.03.22, 15:24:05Сейчас свойства "Наименование" прописывается врукопашную. В каждом файле модели.
Идем дальше...
Т.е. никаких НОВЫХ свойств не создаете, детали не параметризуете, а всего лишь, в Наименование прописываете Ду=XXX?
Тогда "переменные" из "таблицы переменных", что параметризуют (координаты точек вставки, Сопряжения или что-то еще)?
Речь идёт о таблице переменных, которая организуется в модели детали (внешние переменные). Она позволяет управлять геометрией детали из сборки, куда она вставлена, указанием строки в таблице. Я что-то плохо объясняю?

p3452

Цитата: IgorT от 28.03.22, 15:44:54Я что-то плохо объясняю?
Да!
Еще раз возвращаемся ко второму вопросу (см. пост 8):
Цитата: p3452 от 28.03.22, 14:09:24- Как в НИХ появляются "свойства" и "переменные"?

IgorT

Сейчас Наименование, например "TN92-28LR" записываются в свойства компонента сборки вручную, убирая связь с источником.
В модели детали в Переменных организуем Таблицу переменных. Там перечислены внешние переменные детали по столбцам и занесены построчно данные для различных типоразмеров. В сборке для интересующей детали выбираем нужную строку из её таблицы переменных и она перестраивается по указанным данным. Но при этом не получается передать в Наименование детали информацию о выбранном типоразмере автоматически. Собственно и тема о том, как эту инфу засунуть в Наименовании вставленной в сборку детали? Может быть макросом можно сделать?
Что не понятно?

p3452

Цитата: IgorT от 28.03.22, 16:25:17Может быть макросом можно сделать?
Это не ко мне...

Если, все же, надумаете вернутся к источнику "проблемы":
Цитата: IgorT от 28.03.22, 08:22:42Собственно мотив хотелки: Достаёт работа с гидравликой.

то ответе, в конце концов, на вопрос
Цитата: p3452 от 28.03.22, 14:09:24- Как в НИХ появляются "свойства" и "переменные"?
Перефразирую для доходчивости:
"Как в НИХ (компонентах, "штуцерах") появляются ... "переменные"?",
если, как Вы пишите:
Цитата: IgorT от 28.03.22, 08:22:42Сейчас они, компоненты, получены через степ от производителей (в основном) для конкретного Ду.
и, при этом:
Цитата: p3452 от 28.03.22, 15:24:05Т.е. никаких НОВЫХ свойств не создаете, детали не параметризуете, а всего лишь, в Наименование прописываете Ду=XXX?

IgorT

Для особо внимательных повторюсь:
"Сейчас" значит в данный момент ВСЕ нужные компоненты получены через СТЕП от производителя и хранятся как модели Компаса для каждого гидравлического компонента. Их МНОГО!
Когда в модели изделия нужно заменить штуцер TN92-14L на TN92-22L приходится переназначать сопряжения в сборке.
ЭТО ДОСТАЁТ!!!
Так вот, что бы не тратить время на правку сопряжений появилась идея нарисовать модели штуцеров и прочего с использованием таблиц переменных. Тогда можно менять их (штуцеров) геометрические размеры выбирая строку в таблице переменных. А что бы типоразмер штуцера отображался в сборке и СП нужен макрос, так как прописывать руками занимает время.

Михаил88

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache

#  Подключим описание интерфейсов API7
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
application = kompas_api7_module.IApplication(
    Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID,
                                                             pythoncom.IID_IDispatch))
kompas_document = application.ActiveDocument
kompas_document_3d = kompas_api7_module.IKompasDocument3D(kompas_document)
iPart7 = kompas_document_3d.TopPart
parts = iPart7.PartsEx(0)

for part in parts:
    iFeature7 = kompas_api7_module.IFeature7(part)
    Variables = iFeature7.Variables(False, False)
    iVariable7_n = iFeature7.Variable(False, False, 'name')
    if iVariable7_n is not None:
        note = iVariable7_n.Note
        if note is not None:
            iSourcePart7Params = kompas_api7_module.ISourcePart7Params(part)
            source_name = iSourcePart7Params.SourceName
            part.Name = source_name
            part.Update()
            list_var = note.split(',')
            for var in list_var:
                iVariable7_d = iFeature7.Variable(False, False, var)
                if iVariable7_d is not None:
                    name = part.Name
                    value_d = int(iVariable7_d.Value)
                    part.Name = name.replace(f'<{var}>', str(value_d))
                    part.Update()

Можно так сделать. Изменяем наименование детали в сборке согласно значениям внешних переменных.
В наименование шаблонной детали записываем наименование для примера - Штуцер TN92-<D>L, где <D> это переменная значение, которой нужно вставить в наименование. Также необходимо в шаблонной детали создать переменную name она должна быть внешней. В комментарий данной переменной записываем переменные(через запятую без пробелов(пример D,L,F)) значения, которых нужно будет использовать в наименовании в данном случае D. Запускаем макрос на текущей сборке. Изменения выполнятся для первого уровня.Screenshot_1.png
Результат после работы макроса
Screenshot_2.png

Видео работы https://disk.yandex.ru/i/jSoYZ5hjUnyGsQ
+ Благодарностей: 1


Михаил88

вместо part.Name = name.replace(f'<{var}>', str(value_d))
попробуйте  part.Name = name.replace('<' + var + '>', str(value_d))

просто в компас 18,1, в котором я работаю используется python 3
а в 15.2 python 2
У них синтаксисы немного могут отличаться, скорее всего в python 2 еще не было f строк