Информационные окна от интерфейса IProcessInfoWindow

Автор BobaF, 21.02.20, 09:08:10

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

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

BobaF

21.02.20, 09:08:10 Последнее редактирование: 21.02.20, 09:22:49 от BobaF
Добрый день!
Не получается выдать текст в окно IProcessInfoWindow. В справке написано:"Данный интерфейс можно получить у интерфейса IProcessParam процесса, в котором необходимо показать окно, посредством вызова метода IUnknown::QueryInterface". Подскажите в чем может быть проблема?Вот код:

import pythoncom
from win32com.client import Dispatch, gencache
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application

wind=application.CreateProcessParam()
info_wind=kompas_api7_module.IProcessInfoWindow(wind)

info_wind.CloseProcess=False
info_wind.CreateWindow=True
info_wind.Visible=True
info_wind.WindowCaption=('Hello')
info_wind.Text=('Hello')


BobaF



BobaF

Цитата: Sabahs от 21.02.20, 14:19:17https://forum.ascon.ru/index.php?topic=26371.msg193707#msg193707
Куда подробнее, КОМПАС должен передать управление процессу.IProcessInfoWindow.png
А есть ли возможность получить указатель на текущий процесс, чтобы передать КОМПАС передал ему управление?

Если Вам просто нужно выдать сообщение, то посмотрите в SDK пример STEP1, как запустить STEP4, с подпиской на события STEP12, тут в пять строчек кода, не получается.

BobaF

Цитата: Sabahs от 21.02.20, 15:09:26Если Вам просто нужно выдать сообщение, то посмотрите в SDK пример STEP1, как запустить STEP4, с подпиской на события STEP12, тут в пять строчек кода, не получается.
Спасибо, посмотрю! Вообще хотелось бы попробовать вытащить текст сообщения,если такое возможно, из информационного окна стандартных функций расчета площади или мцх. Поэтому решил для начала узнать, как создать такое окно.


BobaF

Цитата: Sabahs от 22.02.20, 09:24:25Для этого в SDK есть отдельные функции.
А какие не подскажите? Или в каких разделах справочной системы они описаны?


BobaF

Цитата: Sabahs от 22.02.20, 10:09:54Их много, всё зависит от задачи, часть показал.
A.png
Спасибо!Ещё есть вопрос: для того чтобы получить указатель на выделенный объект надо использовать итератор? Или можно как - то без него обойтись?

Выделенный объект можно получить через менеджер выделенных объектов - ISelectionManager.
Темы  были об этом, пользуйтесь поиском.

BobaF

Цитата: Sabahs от 25.02.20, 11:19:27Выделенный объект можно получить через менеджер выделенных объектов - ISelectionManager.
Темы  были об этом, пользуйтесь поиском.
Посмотрел их.Но я никак не могу понять как подружить ISelectionManager и ksCalcInertiaProperties, т.к ksCalcInertiaProperties требует указатель на кривую или группу кривых, а свойство ISelectionManager.SelectedObjects возвращает указатель на объект коллекции.

Так создайте временную группу из массива выделенных объектов ISelectionManager.SelectedObjects.

Slaviation

Добрый день. Пример с группой селектирования:

# -*- coding: utf-8 -*-
import pythoncom
from win32com.client import Dispatch, gencache, VARIANT
kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants
kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch))
kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
kompas_api_object = kompas_api7_module.IKompasAPIObject(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IKompasAPIObject.CLSID, pythoncom.IID_IDispatch))
application = kompas_api_object.Application
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document)
kompas_document_2d1 = kompas_api7_module.IKompasDocument2D1(kompas_document_2d)
drawing_groups = kompas_document_2d1.DrawingGroups
drawing_group = drawing_groups.Add(True, "selected_objects")
selection_manager = kompas_document_2d1.SelectionManager
drawing_group.AddObjects(selection_manager.SelectedObjects)
ks_mathematic_2d = kompas_object.GetMathematic2D()
inertia_param = kompas_object.GetParamStruct(kompas6_constants.ko_InertiaParam)
ks_mathematic_2d.ksCalcInertiaProperties(drawing_group.Reference, inertia_param, 1)   # ST_MIX_MM
print(inertia_param.F)

BobaF


BobaF

Неверный ID вложения.1.png
Как получить указатель для кривой, в момент выбора контура для расчета площади? Ни SelectionManager, ни ChooseManager не возвращают указатель на кривую в этот момент.

Потому, что этим занимается IChooseManager - интерфейс менеджера выбора (подсветки) объектов.
Принцип работы тот же.

BobaF

Цитата: Sabahs от 28.02.20, 10:11:27Потому, что этим занимается IChooseManager - интерфейс менеджера выбора (подсветки) объектов.
Принцип работы тот же.
Странно, но при попытке получить указатель IChooseManager.ChoosenObjects возвращает None

BobaF

Причем при выделении другими командами, такими как "Длина кривой", "Расчет МЦХ" IChooseManager прекрасно возвращает указатель, но в их параметрах выделенные фигуры обозначаются, как объекты. В функции "Площадь" выделенная фигура обозначается, как контур и видимо в этом вся проблема, но тогда как получить этот контур?