Считывание таблицы исполнений. API7.

Автор dedyukhinnp, 11.12.25, 11:20:23

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

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

dedyukhinnp

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

Есть задача - определить, есть ли на чертеже таблица исполнений.

Знаю, что таблицы исполнений - это коллекция IAssociationTables.
Задумка в том, чтобы получить эту коллекцию и перебрать её элементы.

У меня почти получилось, но возникает ошибка.

Я пытаюсь сделать так:

Dim kompasApp7 'As KompasAPI7.IApplication
Dim documents 'As KompasAPI7.documents
Dim iKompasDocument 'As KompasAPI7.IKompasDocument
Dim iKompasDocument2D 'As KompasAPI7.IDrawingDocument
Dim iView 'As KompasAPI7.IView
Dim iSymbols2DContainer 'As KompasAPI7.ISymbols2DContainer
Dim iAssociationTables 'As KompasAPI7.IAssociationTables

'подключимся к активному документу
Set iKompasDocument = kompasApp7.ActiveDocument

'пытаемся перебрать все объекты "Таблица исполнений"
'получим интерфейс "Документ 2D"
Set iKompasDocument2D = iKompasDocument 'Здесь выполнится QueryInterface

'получим интерфейс менеджера видов и слоев документа
Set iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager

'получим коллекцию видов
Set iViews = iViewsAndLayersManager.Views

'получим интерфейс активного вида графического документа
Set iView = iViews.ActiveView

'получим интерфейс "2D размеры и обозначения"
Set iSymbols2DContainer = iView 'Здесь выполнится QueryInterface

'получим интерфейс "Ассоциативные таблицы отчетов"
'Set iAssociationTables = iSymbols2DContainer.AssociationTables
Set iAssociationTables = iSymbols2DContainer.GetAssociationTables()

'перебираем все таблицы отчетов
For Each item In iAssociationTables
  call theapp.ShowMessageBox("ИНФО", item)
Next

В строчке Set iAssociationTables = iSymbols2DContainer.GetAssociationTables()
возникает ошибка:
Объект не поддерживает это свойство или метод: 'iSymbols2DContainer.GetAssociationTables'

пытался так: Set iAssociationTables = iSymbols2DContainer.AssociationTables
такая же ошибка...

В чем может быть ошибка?

Kolos

#1
pAssociationTables:=pSymbols2DContainer.AssociationTables;
pAssociationTable:=pAssociationTables.AssociationTable[Index];
+ Благодарностей: 1

lavgirb

У меня иногда работает.
Dim iAssociationTables As VariantБез Set
+ Благодарностей: 1

dedyukhinnp

Цитата: Kolos от 11.12.25, 11:32:52IAssociationTable:=IAssociationTables.AssociationTable[Index];

А как Вы перед этой строчкой получаете IAssociationTables?

dedyukhinnp

Цитата: lavgirb от 11.12.25, 11:38:48У меня иногда работает.
Dim iAssociationTables As VariantБез Set

ну это Вы получается задали переменную только.

а как Вы получаете сам интерфейс iAssociationTables ?

lavgirb

Цитата: dedyukhinnp от 11.12.25, 12:00:21ну это Вы получается задали переменную только.
Не задал, а предложил Вам попробовать заменить на Variant.
+ Благодарностей: 1

dedyukhinnp

Цитата: lavgirb от 11.12.25, 12:03:22Не задал, а предложил Вам попробовать заменить на Variant.
Понял. Спасибо.

Сейчас протестирую

dedyukhinnp

Цитата: Kolos от 11.12.25, 11:32:52pAssociationTables:=pSymbols2DContainer.AssociationTables;

вот так пробовал:
Set iAssociationTables = iSymbols2DContainer.AssociationTables
тоже ошибка
Объект не поддерживает это свойство или метод: 'iSymbols2DContainer.AssociationTables'

Kolos

У меня поддерживает, но я и не на Бейсике пишу.
+ Благодарностей: 1

dedyukhinnp

Выполнил диагностику

Вот у меня код:
Dim kompasApp7 'As KompasAPI7.IApplication
Dim documents 'As KompasAPI7.documents
Dim iKompasDocument 'As KompasAPI7.IKompasDocument
Dim iKompasDocument2D 'As KompasAPI7.IDrawingDocument
Dim iView 'As KompasAPI7.IView
Dim iSymbols2DContainer 'As KompasAPI7.ISymbols2DContainer
Dim iAssociationTables  'As Variant

Set kompasApp7 = CreateObject("Kompas.Application.7")

'получим интерфейс "Документ 2D"
Set iKompasDocument2D = iKompasDocument 'Здесь выполнится QueryInterface

'получим интерфейс менеджера видов и слоев документа
Set iViewsAndLayersManager = iKompasDocument2D.ViewsAndLayersManager

'получим коллекцию видов
Set iViews = iViewsAndLayersManager.Views

'получим интерфейс активного вида графического документа
Set iView = iViews.ActiveView

'получим интерфейс "2D размеры и обозначения"
Set iSymbols2DContainer = iView 'Здесь выполнится QueryInterface

On Error Resume Next

Dim msg, propName
msg = "Тип объекта: " & TypeName(iSymbols2DContainer) & vbCrLf & vbCrLf

' Ключевое свойство ISymbols2DContainer
Set testObj = iSymbols2DContainer.AngleDimensions
If Err.Number = 0 Then
  msg = msg & "v ISymbols2DContainer свойства доступны" & vbCrLf
  msg = msg & "  AngleDimensions: " & TypeName(testObj) & vbCrLf
Else
  Err.Clear
  msg = msg & "x AngleDimensions недоступно" & vbCrLf
End If

' Ключевое свойство IAssociationView
testStr = iSymbols2DContainer.SourceFileName
If Err.Number = 0 Then
  msg = msg & "v IAssociationView свойства доступны" & vbCrLf
  msg = msg & "  SourceFileName: " & testStr & vbCrLf
Else
  Err.Clear
  msg = msg & "x SourceFileName недоступно" & vbCrLf
End If

msgbox(msg)

'получим интерфейс "Ассоциативные таблицы отчетов"
Set iAssociationTables = iSymbols2DContainer.AssociationTables

'освобождаем объекты
Set iAssociationTables = Nothing
Set iSymbols2DContainer = Nothing
Set iView = Nothing
Set iViews = Nothing
Set iViewsAndLayersManager = Nothing
Set iKompasDocument2D = Nothing

Я, получается, добавил вывод в сообщение тип объекта iSymbols2DContainer (я предполагал, что он должен был быть ISymbols2DContainer) - там вывелось, что у меня тип IAssociationView, то есть не то что-то попало в объект

И далее в сообщении я на всякий случай проверяю, доступно ли какое нибудь свойство объекта ISymbols2DContainer - нет не доступно, а вот свойство IAssociationView как раз таки доступно (ещё раз убедился, что не тот тип объекта)

Вот такое вывелось сообщение:
Тип объекта: IAssociationView

x AngleDimensions недоступно

v IAssociationView свойства доступны

SourceFileName: C:\Users\Nikita\AppData\Roaming\TechnologiCS\V1923\тест040725-1251_Кровать.a3d


Как же правильно получить интерфейс iSymbols2DContainer на бейсике? Кто-нибудь знает?

Kolos

Вот тема с программой, можете там скачать и попробовать.

+ Благодарностей: 1

Хмарик

Цитата: dedyukhinnp от 11.12.25, 11:20:23определить, есть ли на чертеже таблица исполнений.
... получить  и перебрать её элементы.
dedyukhinnp, а что вы собираетесь с ними дальше делать?
+ Благодарностей: 1

p3452

Как у ТС хоть что-то может работать, если у него "тип переменной" закоментирован?
+ Благодарностей: 1

Kolos

Цитата: p3452 от 11.12.25, 18:45:06Как у ТС хоть что-то может работать, если у него "тип переменной" закоментирован?
Я со своим зрением и не заметил.
+ Благодарностей: 1

dedyukhinnp

Цитата: p3452 от 11.12.25, 18:45:06Как у ТС хоть что-то может работать, если у него "тип переменной" закоментирован?

он выглядит как закоментированный, но на самом деле наш интерепретатор (нашей платформы) понимает эти комментарии

dedyukhinnp

Цитата: Хмарик от 11.12.25, 18:22:24dedyukhinnp, а что вы собираетесь с ними дальше делать?

задача - вывести массу , которая указана в основной надписи
обычно - там числовое значение, его и выводим

но, если мы понимаем, что присутствует таблица исполнений, то мы выведем - "См. табл."

саму эту ссылку "См. табл" я не смог считать из основной надписи, когда она там есть, все равно выводит числовое значение массы

поэтому решил логически, что если на чертеже есть таблица исполнений, значит там "См. табл."

dedyukhinnp

Цитата: Kolos от 11.12.25, 18:18:37Вот тема с программой, можете там скачать и попробовать.



да, Ваша программа при выделении таблицы исполнений - выводит информацию о ней

sEmbodimentsTable - Таблица иcполнений
Актуальность таблицы - Да
Тип привязки таблицы - ksTPLeftUp - Левый верхний угол
 Координата точки привязки таблицы X = 799 ММ Y = -2072 ММ
Количество таблиц в созданном отчете - 1
Заголовок таблицы №1 - Текст отсутствует

p3452

Цитата: dedyukhinnp от 11.12.25, 18:55:51он выглядит как закоментированный, но на самом деле наш интерепретатор (нашей платформы) понимает эти комментарии
:-))) А конвертацию API "ваш интерпритатор" то же автоматически делает?
Цитата: dedyukhinnp от 11.12.25, 11:20:23В строчке Set iAssociationTables = iSymbols2DContainer.GetAssociationTables()
возникает ошибка:
Объект не поддерживает это свойство или метод: 'iSymbols2DContainer.GetAssociationTables'
Функция GetAssociationTables() из ksAPI...
+ Благодарностей: 1

dedyukhinnp

Цитата: p3452 от 11.12.25, 19:10:42:-))) А конвертацию API "ваш интерпритатор" то же автоматически делает?Функция GetAssociationTables() из ksAPI...


не знаю...

был бы рабочий пример на Basic, где успешно получают объект iSymbols2DContainer - то я наверное смог бы разобраться и подстроить его под наш интерпритатор

lavgirb

Цитата: dedyukhinnp от 11.12.25, 19:01:13поэтому решил логически, что если на чертеже есть таблица исполнений, значит там "См. табл."
Не обязательно. По ГОСТ, если у исполнений масса одинаковая, она указывается в осн. надписи. Как постоянная часть в групповом чертеже.
+ Благодарностей: 1