Диалог выбора

Автор Lemieux, 01.08.24, 13:19:40

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

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

Lemieux

Есть ли в КОМПАС, чтобы вызывать диалог запроса выбора пользователя? Например "Укажите элемент/модель". Я знаю, что есть SelectionManager, но он работает уже только с выделенными объектами.

p3452

Цитата: Lemieux от 01.08.24, 13:19:40Есть ли в КОМПАС, чтобы вызывать диалог запроса выбора пользователя?
Самая банальная операция для API - диалоговые окна (много вариантов!).
И боле "продвинутый" вариант - подписка на события.

Lemieux

Цитата: p3452 от 01.08.24, 17:28:06И боле "продвинутый" вариант - подписка на события.
Я видел только события по выбору для API5, но тут же событие происходит, когда пользователь уже что-то выбрал. А мне нужно чтобы программа сама просила пользователя что-то выбрать и была в режиме ожидания.

Цитата: p3452 от 01.08.24, 17:28:06Самая банальная операция для API - диалоговые окна (много вариантов!).
Что за варианты? Я в API7 не нашёл.

Vi2

И чем UserSelectEntity не устраивает?
+ Благодарностей: 1

Lemieux

Цитата: Vi2 от 01.08.24, 20:31:37И чем UserSelectEntity не устраивает?
Тем, что он API5. Хотелось бы API7.

Vi2

Цитата: Lemieux от 01.08.24, 20:48:28Тем, что он API5. Хотелось бы API7.
А зачем в АПИ7 реализовывать существующий функционал АПИ5 или 3ДСОМ? Какие там можно выдумать новые функции?

p3452

Надо понять (!), что API7 не заменяет API5 (возможно и была такая задумка, но АСКОНовцы слишком ленивы).
В помощь - функции конвертации интерфейсов.

Lemieux

Цитата: Vi2 от 04.08.24, 00:36:52А зачем в АПИ7 реализовывать существующий функционал АПИ5 или 3ДСОМ? Какие там можно выдумать новые функции?
Цитата: p3452 от 04.08.24, 11:41:04Надо понять (!), что API7 не заменяет API5 (возможно и была такая задумка, но АСКОНовцы слишком ленивы).
В помощь - функции конвертации интерфейсов.
Коллеги, в API7 удобней заниматься отладкой и у него хотя бы архитектура приближена к C#. API5 проектировал человек не разбирающийся в C#.

PS Хотя после методов *Gabarit, свойств Regime, типов данных нее соответствующих свойствам, мне кажется что там мало кто-то в чём-то разбирается серьёзно.

Vi2

Цитата: Lemieux от 04.08.24, 16:20:08Коллеги, в API7 удобней заниматься отладкой и у него хотя бы архитектура приближена к C#. API5 проектировал человек не разбирающийся в C#.
Я так думаю, что модель сом объектов создавалась задолго до появления Шарпа. Версия 7 выглядит получше с точки зрения метаданных, но всё равно не очень.
ЦитироватьPS Хотя после методов *Gabarit, свойств Regime, типов данных нее соответствующих свойствам, мне кажется что там мало кто-то в чём-то разбирается серьёзно.
Что ты конкретно имеешь в виду? Параметры [out] для GetGabarit?

Lemieux

Цитата: Vi2 от 04.08.24, 17:00:50Версия 7 выглядит получше с точки зрения метаданных, но всё равно не очень.
С ней уже хотя бы можно работать по человечески. А API5 напоминает извращения C++.

Цитата: Vi2 от 04.08.24, 17:00:50Что ты конкретно имеешь в виду? Параметры [out] для GetGabarit?
Я имею ввиду, что такое ощущение, что API писал школьник, который даже не удосужился воспользоваться словарём. Возвращаемый тип данных, это в контексте моей другой темы, где возвращаемый тип стилей double.

Lemieux

Цитата: p3452 от 04.08.24, 11:41:04В помощь - функции конвертации интерфейсов.
Что это за функции? Поиск ничего не выдаёт.

msvteh

KompasObject::TransferReference
Преобразовать объект по reference из API5 в интерфейсный объект API7
+ Благодарностей: 1

Lemieux

Цитата: msvteh от 04.08.24, 22:46:05KompasObject::TransferReference
Преобразовать объект по reference из API5 в интерфейсный объект API7

Спасибо, буду дальше копать.

Vi2

Цитата: Lemieux от 04.08.24, 17:14:40С ней уже хотя бы можно работать по человечески. А API5 напоминает извращения C++.
С любой моделью можно работать по-человечески. В какой-то мере есть крен в сторону СиС++ (а что было в то время в использовании? Шарп ещё не родился в мечтах даже), но откуда ты знаешь, что Шарп не извращение?

Вот, например, что ты считаешь извращением, ну хотя бы с точки зрения Шарпа, не говорю о С++, который ты, скорее всего, не знаешь?

Цитата: Lemieux от 04.08.24, 17:14:40Я имею ввиду, что такое ощущение, что API писал школьник, который даже не удосужился воспользоваться словарём. Возвращаемый тип данных, это в контексте моей другой темы, где возвращаемый тип стилей double.
Я не могу судить, об использовании типов, но я встречал такое, когда передаётся в виде double, например, номер версии. Про стили ничкего не могу сказать, т.к. не использовал и не касался этой темы (и не хочу касаться).

Vi2

Цитата: msvteh от 04.08.24, 22:46:05Преобразовать объект по reference из API5 в интерфейсный объект API7
Тут скорее нужно из API7 перевести в API5 (или даже API3DCOM), выполнить нужное действие и забыть о используемом API5, продолжая работать с API7.

Lemieux

Цитата: Vi2 от 05.08.24, 19:35:11Вот, например, что ты считаешь извращением
Работу со штампом.

Цитата: Vi2 от 05.08.24, 19:35:11не говорю о С++, который ты, скорее всего, не знаешь
Конечно не знаю, я же на шару выдаю сравнение. Главное, что его знают программисты таких приложений как КОМПАС, Кабели и жгуты, Компас-Электрик.

Vi2

Цитата: Lemieux от 06.08.24, 08:44:06Работу со штампом.
ну т.е. кода не будет. Я лично со штампом не встречался и даже не могу представить, хотя мог бы слазить в примеры от Компас. Так дай направление, что искать.

Если не лень в эту сторону общаться, всё-таки это оффтоп начался.

PS
Мы кстати тоже стараемся программировать в 7 апи, но не чураемся перехода на другие возможности, если в 7 апи этого нет. И ничё, рожа не трескается. :)

Lemieux

Цитата: Vi2 от 06.08.24, 11:01:26ну т.е. кода не будет. Я лично со штампом не встречался и даже не могу представить, хотя мог бы слазить в примеры от Компас. Так дай направление, что искать.

Если не лень в эту сторону общаться, всё-таки это оффтоп начался.

PS
Мы кстати тоже стараемся программировать в 7 апи, но не чураемся перехода на другие возможности, если в 7 апи этого нет. И ничё, рожа не трескается. :)
Step 5, метод EditStamp, пример работы со штампом. Там чтобы просто взять текстовое значение из ячейки, нужно создать объект, проинициализировать его, передать его в качестве аргумента в метод другого объекта.

Vi2

для 17Компаса и 23Компаса

[uuid(0422828C-F174-495E-AC5D-D31014DBBE87),version(1.0)]
library Kompas6API5

17:
[uuid(E36BC97C-39D6-4402-9C25-C7008A217E02),helpstring("Интерфейс приложения КОМПАС 3D.")]
dispinterface KompasObject {
properties:
...
            long lookStyle;
methods:

23:
[uuid(E36BC97C-39D6-4402-9C25-C7008A217E02),helpstring("Интерфейс приложения КОМПАС 3D.")]
dispinterface KompasObject {
properties:
...
            long lookStyle;
            [id(0x00000089), helpstring("Текущий каталог.")]
            BSTR currentDirectory;
methods:
Приложение с апи5 будет нормально работать как с 23, так и 17 Компасом по параметру currentDirectory, т.е. не упадёт, т.к. будет возврат ошибки "Нет такого метода" из компаса.

[uuid(69AC2981-37C0-4379-84FD-5DD2F3C0A520),version(1.0),helpfile("sdk.hlp"),helpcontext(00000000)]
library KompasAPI7

17:
[odl,uuid(6A2EFAF7-8254-45A5-9DC8-2213F16AF5D7),helpstring("Интерфейс приложения КОМПАС 3D"),helpcontext(0x00009c40),dual,nonextensible,oleautomation]
interface IApplication : IKompasAPIObject {
...
[id(0x00000016), helpstring("Выдать модельное сообщение."), helpcontext(0x00009c56)]
HRESULT MessageDlg(...);

23:
[odl,uuid(6A2EFAF7-8254-45A5-9DC8-2213F16AF5D7),helpstring("Интерфейс приложения КОМПАС 3D"),helpcontext(0x00009c40),dual,nonextensible,oleautomation]
interface IApplication : IKompasAPIObject {
...
[id(0x00000016), helpstring("Выдать модельное сообщение."), helpcontext(0x00009c56)]
HRESULT MessageDlg(...);
[id(0x00000017), propget, helpstring("Текущий каталог."), helpcontext(0x00009c57)]
HRESULT CurrentDirectory([out, retval] BSTR* PVal);
[id(0x00000017), propput, helpstring("Текущий каталог."), helpcontext(0x00009c57)]
HRESULT CurrentDirectory([in] BSTR PVal);
Ооопс, приложение с апи7 уже не будет нормально работать с 17 Компасом, как с 23, по параметру СurrentDirectory вплоть до вылета Компаса или даже форматирования С диска (шутка).

Так что версии интерфейсов - штука обоюдоострая: что в 5 апи, что в 7 апи есть подводные камни или грабли.

PS
Про Step 5, метод EditStamp посмотрю позже и отпишусь впечатлениями.

Vi2

Цитата: Lemieux от 06.08.24, 11:09:54Step 5, метод EditStamp, пример работы со штампом. Там чтобы просто взять текстовое значение из ячейки, нужно создать объект, проинициализировать его, передать его в качестве аргумента в метод другого объекта.
А в Шарпе с апи7 как бы это выгледело? С апи5 ужасно, но с чем сравнить?