КОМПАС. Как программно отключить в эскизе режим отображения ограничений

Автор chum, 18.03.26, 15:23:40

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

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

chum

Коллеги, добрый день.

Подскажите, пожалуйста, есть ли возможность программного отключения режима отображения ограничений в эскизе?
Если да, то буду очень признательна, если поделитесь информацией, как это сделать.
С помощью какого интерфейса?
Отключить параметрический режим получилось, а вот, как отключить режим ограничений не могу найти ни в справке, ни на форуме.
Возможно, не так запрос поиска делала, но на что фантазии хватило:)
КОМПАС - 24 версия, если это важно.

chum

ЦитироватьОтключить параметрический режим получилось, а вот, как отключить режим ограничений не могу найти ни в справке, ни на форуме

Хотя... если возможность отключения параметрического режима появилась только в 24-й версии, то, возможно, что пока с помощью API нельзя отключить режим отображения ограничений в эскизе. Но это предположение.

Student2025

Когда писал Вират Лакх, что перебором получает команды - я принял это за шутку, а это оказалась горькой правдой..

5714 - отключение/включение параметрического режима
5995 - отключение/включение отображение ограничений
5996 - отключение/включение отображение степеней свободы


from win32com.client import Dispatch

import KompasApi5V24 as KAPI5

api5_ = Dispatch('Kompas.Application.5', None, KAPI5.KompasObject.CLSID)

value = 5714
if api5_.ksIsKompasCommandEnable(value):
    if api5_.ksIsKompasCommandCheck(value) == 1:
        api5_.ksExecuteKompasCommand(value, False)

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

chum

Спасибо большое!

Сама смотрела в сторону констант команд, но пока не нашла вот такой подборки!
Завтра на свежую голову попробую выполнить!

Еще раз благодарю!

chum

ЦитироватьЗавтра на свежую голову попробую выполнить!

Ждать завтрашнего дня не стала, попробовала сейчас - всё получилось!
Спасибочки!
   
public static void SetConstraintMode(this KompasObject kompasObject, bool constaintMode)
    {
        try
        {
            //5714 - отключение / включение параметрического режима
            //5995 - отключение / включение отображение ограничений
            //5996 - отключение / включение отображение степеней свободы

            var commandId = 5995;
           
            if (!kompasObject.ksIsKompasCommandEnable(commandId))
                return;

            if (kompasObject.ksIsKompasCommandCheck(commandId) == 0)
                return;

            kompasObject.ksExecuteKompasCommand(commandId, constaintMode);
       }
        catch (Exception)
        {
            _logger.Error(ex);
        }
        finally
        {
        }
    }
}

chum

Цитата: Student2025 от 18.03.26, 22:29:46Когда писал Вират Лакх, что перебором получает команды - я принял это за шутку, а это оказалась горькой правдой..

5714 - отключение/включение параметрического режима
5995 - отключение/включение отображение ограничений
5996 - отключение/включение отображение степеней свободы

Подскажите, пожалуйста, еще такой вопрос: в какой библиотеке эти константы определены?

Поиск по 5995 подсказал, что в KompasAPI7.dll, но декомпилировав её, что там там не найду нужную мне....

Это я к чему:
мне еще там же в эскизе на Панели быстрого доступа нужно программно нажать на кнопку "Скрыть все вспомогательные объекты", соответственно, наверное, надо узнать константу команды.

Может быть, id команды в каком-то событии можно отловить?
Например, для документа в событии ProcessActivate?
Но у меня не сработало, но, может, это я косячно подписываюсь именно на отлов этого действа? :):)
Или если не там, то где отлавливать, какая команда вызвана в эскизе на Панели быстрого доступа?


p3452

Добавьте к указаным трем числам по 30000 и получите еще один НАБОР КОМАНД, т.е.
commandkompas.png
+ Благодарностей: 1

chum

Цитата: p3452 от Вчера в 01:09:54Добавьте к указанным трем числам по 30000 и получите еще один НАБОР КОМАНД, т.е.
commandkompas.png


Спасибо за новые знания про 30000!

Но как узнать еще другие значения?
В частности, мне нужно в эскизе узнать id команды "Скрыть все вспомогательные объекты", которая на Панели быстрого доступа

p3452

Прочтите что у Вас написано в желтеньком прямоугольнике...
То о чем Вы спрашиваете относится к модели или сборке, поэтому, как говорится "есть варианты" - у 3D документа есть специальное свойство, но есть и команда...
Что бы увидеть все варианты откройте справку по SDK v24 (локальную или сетевую) и в строке поиска наберите "Скрыть все вспомогательные объекты".
+ Благодарностей: 1

Михаил88

Цитата: chum от Вчера в 01:18:44В частности, мне нужно в эскизе узнать id команды "Скрыть все вспомогательные объекты", которая на Панели быстрого доступа

40368

Screenshot_1.png

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

Student2025

Код можно сократить:

if kompasObject.ksIsKompasCommandEnable(commandId)
if kompasObject.ksIsKompasCommandCheck(commandId)
if kompasObject.ksExecuteKompasCommand(commandId, constaintMode)
ваш код для дальнейшей работы
+ Благодарностей: 1

chum

Уважаемые форумчане!

Все получилось, огромное спасибо всем за помощь!!!!