Как повторить фантом обозначения позиции?

Автор ТрындецЪ, 05.04.18, 14:13:38

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

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

ТрындецЪ

Разбираюсь с фантомами (ksPhantom).
Двигать временную группу с фантомом сообразил как.
Но мне нужно повторить фантом, который появляется при создании обозначения позиции. Т.е. указываем точку, появляется фантом позиции с "резиновой" линией выноской и линия выноска следует за мышью до тех пор, пока не нажмём ЛКМ.
Есть фантом "отрезок" (ksType2), но это только "резиновый" отрезок. К нему, как я понял, не добавить фантом текста над полкой.
Может мне кто-нибудь на словах описать алгоритм создания фантома обозначения позиции?
Или же это специальный тип фантома, созданный только для этой команды? В таком случае, как мне программно подсунуть номер позиции в панель свойств этой команды?

IgorT

#1
квадрат прямоугольный надо фантомит вместо текста. имхо.
или не прямоугольный....
рамку текста показать надо. будет достаточно.

ТрындецЪ

Цитата: IgorT от 05.04.18, 14:47:28
квадрат прямоугольный надо фантомит вместо текста. имхо.
или не прямоугольный....
рамку текста показать надо. будет достаточно.
Тут вся непонятка для меня в реализации "резинового" отрезка и других объектов в одном фантоме.

Раз клацнули, временная группа запомнила положение, далее во временной группе изменяете точку конца резинового отрезка, всё остальное неизменно.
+ Благодарностей: 1

ТрындецЪ

Цитата: Sabahs от 05.04.18, 15:27:41
Раз клацнули, временная группа запомнила положение, далее во временной группе изменяете точку конца резинового отрезка, всё остальное неизменно.
Но как мне получать текущие координаты мыши во время выполнения процесса ksCursor, если ksDocument2D.ksCursor(ksRequestInfo, 0, 0, ksPhantom) возвращает мне координаты только после нажатия ЛКМ (соответственно, после завершения процесса)?

Запрос должен быть динамический.
RequestInfo.dynamic - Признак динамического запроса.
+ Благодарностей: 1

ТрындецЪ

Цитата: Sabahs от 05.04.18, 15:40:10
Запрос должен быть динамический.
RequestInfo.dynamic - Признак динамического запроса.
Вот это уже кое-что! Буду работать в этом направлении. Спасибо!


ТрындецЪ

Цитата: Sabahs от 05.04.18, 15:40:10
Запрос должен быть динамический.
RequestInfo.dynamic - Признак динамического запроса.
Добавил я ksRequestInfo2.dynamic = 1, но всё осталось без изменений.
функция
koord = ksDocument2D.ksCursor(ksRequestInfo, 0, 0, ksPhantom)
возвращает мне координаты  koord[1], koord[2] только после того, как отработает.
До этого момента  мой код не выполняется дальше, а ждёт завершения выполнения этой функции.
Как получать тогда динамически изменяемые координаты?
Если делаю так:
x, y = 0, 0
ksDocument2D.ksCursor(ksRequestInfo2, x, y, ksPhantom)
то x и y не получают координат даже после выполнения функции (=0).

Нужно определить функцию обратной связи, собственно в которой, Вы будете всё получать.
RequestInfo.SetCallBackC - Установить имя функции обратной связи для процесса Cursor.
+ Благодарностей: 1

ТрындецЪ

#10
Цитата: Sabahs от 05.04.18, 16:21:11
Нужно определить функцию обратной связи, собственно в которой, Вы будете всё получать.
RequestInfo.SetCallBackC - Установить имя функции обратной связи для процесса Cursor.
Может ли эта функция быть в этом же коде, а не в сторонней dll?
Упрощу задачу. Хотя бы понять, как выводить текущие координаты мыши из ksCursor.
# -*- coding: utf-8 -*-

import pythoncom
from win32com.client import Dispatch, gencache

KAPI = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0)
iKompasObject = KAPI.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(KAPI.KompasObject.CLSID, pythoncom.IID_IDispatch))

iDocument2D = iKompasObject.ActiveDocument2D()

ksRequestInfo = iKompasObject.GetParamStruct (10)
ksRequestInfo.Init
ksRequestInfo.prompt = u'Укажите точку, на которую указывает линия-выноска'
ksRequestInfo.dynamic = 1

koord = iDocument2D.ksCursor(ksRequestInfo, 0, 0, None)
print koord

Питон, мне показывать не надо, я на нём не работаю, вообще, то, что выше, сильно - скудно.
PS. Любой пример из SDK - Step4, если память не изменяет.
+ Благодарностей: 1

ТрындецЪ

Благодаря примеру Slaviation из темы http://forum.ascon.ru/index.php/topic,31276.0.html удалось реализовать задуманный фантом.
Перефразирую Slaviation, применительно к моему примеру:
"Сначала запускаем DispatchOCX_for_PosLeader.py - в системе зарегистрируется определенный в нем OCX. Затем на активном чертеже запускаем Test_for_PosLeader.pyw."
+ Благодарностей: 1