Программирование сварных соединений

Автор BSMaikl, 06.03.23, 15:31:25

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

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

BSMaikl

Добрый день! Пишу приложение, задача которой перебрать все сварные швы на чертеже и рассортировать их в разные таблицы. Как я понимаю сварные швы- это обычные макроэлементы.
Не подскажите как можно перебрать все сварные швы на чертеже и получить к их свойствам доступ?

IgorT

Вас не смущает, что такое приложение уже существует и доступно?

BSMaikl

Мне нужно сделать сортировку сварных швов на две таблицы. В одной будут "поднадзорные швы" в другой "неподнадзорные швы". Приложение "Сварные швы" не позволяет это сделать стандартными методами. Поэтому я пишу приложение для сортировки швов по разным таблицам

PS

Цитата: BSMaikl от 06.03.23, 16:01:57Мне нужно сделать сортировку сварных швов на две таблицы. В одной будут "поднадзорные швы" в другой "неподнадзорные швы". Приложение "Сварные швы" не позволяет это сделать стандартными методами. Поэтому я пишу приложение для сортировки швов по разным таблицам
Вы просто не разобрались с приложением "Сварные соединения".
1. Приложение создает все свойства обозначения сварного шва, которые заданы в Настройках приложения см.14.
2. Можно создать сколько угодно разных таблиц. Все зависит от стиля отчета (таблицы отчета). Стиль отчета можно создать такой какой Вам нужно см.37.
+ Благодарностей: 1

BSMaikl

В данном примере приведено 5 типов швов. Да, создать разные стили отчёта с отображением разных свойств можно, но в моём случае требуется сделать например так:

На чертеже например 5 разных типов швов, 3 из которых поднадзорные швы(подверженные контролю), 2 из которых неподнадзорные швы. И по итогу должна происходить сортировка в одной таблице должны быть поднадзорные швы в другой неподнадзорные. См. пример ниже

PS

Цитата: BSMaikl от 07.03.23, 09:04:38В данном примере приведено 5 типов швов. Да, создать разные стили отчёта с отображением разных свойств можно, но в моём случае требуется сделать например так:
На чертеже например 5 разных типов швов, 3 из которых поднадзорные швы(подверженные контролю), 2 из которых неподнадзорные швы. И по итогу должна происходить сортировка в одной таблице должны быть поднадзорные швы в другой неподнадзорные. См. пример ниже
Все зависит от того как Вы отличаете эти поднадзорные и не поднадзорные швы? По номеру или по другому параметру?

BSMaikl

Планировал для поднадзорных швов добавить свойство, например выпадающий список с выбором "поднадзорный" или "неподнадзорный". В зависимости от выбора шов отправляется либо в первую либо во вторую таблицу. Как вообще можно программно перебрать все макроэлементы на чертеже?

PS

Цитата: BSMaikl от 07.03.23, 10:35:00Планировал для поднадзорных швов добавить свойство, например выпадающий список с выбором "поднадзорный" или "неподнадзорный". В зависимости от выбора шов отправляется либо в первую либо во вторую таблицу. Как вообще можно программно перебрать все макроэлементы на чертеже?
1. Перебрать можно при помощи фуrкций API. Нужно создать итератор по макроэлементам и потом в цикле пройти по всем макро, при этом нужно еще выделить обозначения швов из других макро. Затем получить нужные Вам свойства обозначений. На прямую данные с обозначений Вы не получите, к ним нет доступа, только к свойствам.
2. Проще создать нужное Вам свойство ("поднадзорный" или "неподнадзорный"). В редакторе свойств для каждого обозначения указать нужный параметр этого свойства. Создать стиль отчета добавив в него невидимую колонку с этим свойством и фильтровать данные по этому свойству.

BSMaikl

Спасибо большое! Очень помогли! А не подскажите как можно перебрать свойства объекта в цикле? Я так понимаю тоже с помощью итератора? Есть ли какой нибудь пример кода получения свойств объекта?

dimak222

Цитата: BSMaikl от 07.03.23, 14:19:31Есть ли какой нибудь пример кода получения свойств объекта?
Получение свойств выделенных объектов на Python:
from win32com.client import Dispatch, DispatchEx, gencache # библиотека API Windows

def printprop(i): # свойства интерфейсов
    for prop in sorted(i._prop_map_get_):
        try:
            print(prop, getattr(i, prop))
        except:
            print(prop, "пропущен")
            continue

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

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

if iKompasDocument: # если есть октрытый документ
    iKompasDocument2D1 = KompasAPI7.IKompasDocument2D1(iKompasDocument) # дополнительный интерфейс IKompasDocument2D

try:
    iSelectionManager = iKompasDocument2D1.SelectionManager # менеджер выделенных объектов
    iSelectedObjects = iSelectionManager.SelectedObjects # массив выделенных объектов в виде SAFEARRAY | VT_DISPATCH

    if iSelectedObjects == None: # если нет выделеных объектов
        print("Нет выделеных объектов!")

    else:
        if isinstance(iSelectedObjects, tuple): # если выбрано несколько объектов (кортеж объектов)
            for iSelectedObject in iSelectedObjects: # перебор всех выделеных объектов
                iSelectedObject = iSelectedObject # последний объект
        else:
            iSelectedObject = iSelectedObjects # если один объект

        try:
            print("Интерфейс:")
            printprop(iSelectedObject) # свойства интерфейсов
        except:
            print("Интерфейс не проверить!")

except:
    print("Нет выделеных объектов!")
    pass