Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: bender от 29-06-2016, 21:08:40

Название: Странное поведение Editor.Drag
Отправлено: bender от 29-06-2016, 21:08:40
Есть команда копирующая из одного чертежа в другой выбранные пользователем объекты. Во втором чертеже пользователю необходимо указать точку вставки и угол поворота временного блока (через jig).

1. Открываю AutoCAD с новым чертежом (/t acad.dwt) - Чертёж 1.
2. Загружаю сборку.
3. Создаю еще один чертёж - Чертёж 2.
4. В Чертеже 2 выполняю команду.
5. В Чертеже 1 запрашивается точка вставки и угол поворота, устанавливается блок.
6. Возвращаюсь в Чертёж 2 и снова выполняю команду.
7. В Чертёже 1 - ed.Drag(jig) возвращает PromptStatus.Cancel

Собственно вопрос - почему и как бороться?

Windows 7 x64 SP1, AutoCAD 2013 SP 2 и AutoCAD 2015 SP 2

Код:
Извините, вам запрещён просмотр содержимого спойлеров.
Название: Re: Странное поведение Editor.Drag
Отправлено: Александр Ривилис от 29-06-2016, 23:48:33
Собственно вопрос - почему и как бороться?
Это нормально. Думаю, что тебе придется разделить свою команду на две. В первой собираешь информацию (она может быть и с флагом Session), а затем переключившись на нужный документ запускаешь вторую (модальную) команду через SendStringToExecute, в которой уже и выполняешь jig. Если ты обратил внимание, то в пределах одного документа (т.е. без переключения) всё работает нормально.
Хотя из всего, что ты тут написал я не понял зачем это всё нужно....
Название: Re: Странное поведение Editor.Drag
Отправлено: Александр Ривилис от 30-06-2016, 00:16:55
А вот и реализация (ох уж этот VB.NET...):
Извините, вам запрещён просмотр содержимого спойлеров.

И так оно выглядит:

Название: Re: Странное поведение Editor.Drag
Отправлено: bender от 30-06-2016, 00:42:52
Спасибо за код.  ;D Но там всё малость сложнее. Это я "понадёргал" по-быстрому. Но идея понятна, когда-то так и было. И не команда тогда, наверное, а lisp-функция.

Хотя из всего, что ты тут написал я не понял зачем это всё нужно....

Этой программе уже сто лет в обед, со времен ещё AutoCAD 2000i. Тогда так и было, два отдельных макроса (VBA + Lisp). Изначально она была нужна для копирования внешних ссылок между чертежами (была такая беда тогда, не копировались они через буфер) + надо было ещё скопировать соответствующие словари и Х-записи. Потом на Net всю систему переделали, под 2008-й кажется. Пользователи привыкли уже к "кнопке" - переписали и её до кучи.

Если ты обратил внимание, то в пределах одного документа (т.е. без переключения) всё работает нормально.

А с чего бы ему не работать?

Это нормально.

Почему нормально-то? На рельсы, конечно, ложится не буду, но в 2008-2010 работало. Что тут такого "криминального"?

Название: Re: Странное поведение Editor.Drag
Отправлено: Александр Ривилис от 30-06-2016, 00:49:57
Почему нормально-то? На рельсы, конечно, ложится не буду, но в 2008-2010 работало. Что тут такого "криминального"?
Вот тебе наводка: http://forums.autodesk.com/t5/net/editor-getpoint-cancelled-automatically-after-mdiactivedocument/td-p/5527329
(примечание: Editor.GetPoint и JigPrompts.AcquirePoint - близнецы братья)
Название: Re: Странное поведение Editor.Drag
Отправлено: Александр Ривилис от 30-06-2016, 00:53:30
И не команда тогда, наверное, а lisp-функция.
Именно команда, а данные будешь передавать через статические (Shared) переменные. Смысла в создании lisp-функции не вижу.
Название: Re: Странное поведение Editor.Drag
Отправлено: bender от 30-06-2016, 00:59:16
Смысла в создании lisp-функции не вижу
Чтобы пытливому юзеру не была видна  :D
Название: Re: Странное поведение Editor.Drag
Отправлено: Александр Ривилис от 30-06-2016, 01:05:20
Чтобы пытливому юзеру не была видна  :D
Ты не обратил внимание, на флаг CommandFlags.NoHistory, который я указал для второй команды? Это именно для этой цели.
Впрочем при помощи AddCommand / RemoveCommand ты можешь добавлять/удалять команды динамически: http://adn-cis.org/forum/index.php?topic=4286.msg15988#msg15988
Название: Re: Странное поведение Editor.Drag
Отправлено: bender от 30-06-2016, 01:06:20
Ты не обратил внимание, на флаг CommandFlags.NoHistory, который я указал для второй команды?

Да, есть такой грех.
Название: Re: Странное поведение Editor.Drag
Отправлено: bender от 30-06-2016, 01:20:24
Вроде понятно. Ладно, переделаем. Спасибо.