| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Acad 2009; .Net 3.5; UnknownCommand - первый раз после регистрации, событие всегда генерируется дважды.

Acad 2009; .Net 3.5; UnknownCommand - первый раз после регистрации, событие всегда генерируется дважды.

Ответ
Поиск в этой теме
Непрочитано 31.03.2011, 16:22 #1
Acad 2009; .Net 3.5; UnknownCommand - первый раз после регистрации, событие всегда генерируется дважды.
hwd
 
C, C++, C#
 
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762

Код, перехватывающий событие получения неизвестной команды и подставляющий вместо неё что-то (например др. команду с указанием параметров):
Код:
[Выделить все]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using acad = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace UnknownCommands {
    public class Class1 {
        [CommandMethod("cmd", CommandFlags.Modal)]
        public void Cmd() {
            Document dwg = acad.DocumentManager.MdiActiveDocument;
            Editor ed = dwg.Editor;
            Database db = dwg.Database;
            dwg.UnknownCommand+=new UnknownCommandEventHandler(dwg_UnknownCommand);
        }

        void dwg_UnknownCommand(object sender, UnknownCommandEventArgs e) {
            Document dwg = acad.DocumentManager.MdiActiveDocument;
            dwg.Editor.WriteMessage(string.Format("\nИмя неизвестной команды: {0}\n", e.GlobalCommandName));
            dwg.SendStringToExecute("_rectangle 0,0 100,100 ", false, false, true);
        }
    }
}
Непонятное поведение:
При запуске первой неизвестной команды, событие UnknownCommand происходит дважды, в результате чего вычерчивается два прямоугольника один поверх другого. Все последующие неизвестные команды, как и полагается, вызывают событие по одному разу. Не пойму, почему первая неизвестная команда вызывает событие дважды. На скрине показал вызов первой неизвестной команды, после чего второй прямоугольник вручную перетащил с первого, дабы было видно, что их на самом деле создалось два:

Может кто в курсе, почему так происходит? Регистрации на какие-то др. события не выполнял.
Проверял на:
- Windows XP SP3 x86 Rus, AutoCAD 2009 SP3 Enu x86
- Windows 7 SP1 x64 Rus, AutoCAD 2009 SP3 Enu x64

Результат работы идентичен для обоих вариантов.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось Кулик Алексей aka kpblc, 31.03.2011 в 18:11.
Просмотров: 2126
 
Непрочитано 31.03.2011, 17:03
#2
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Не совсем понятно.
Если имя первой неизвестной команды www и событие происходит дважды, то должно быть напечатано две строчки
Код:
[Выделить все]
Имя неизвестной команды: WWW
Имя неизвестной команды: WWW
А на скрине всего одна такая строчка?

В качестве версии. Попробуй в SendStringToExecute выполнить не _rectangle, а _rectang.
Команду _rectangle AutoCAd не признает, генерирует событие "неизвестная команда" и сам же подбирает для неё замену в виде RECTANG.
А в следующий раз рассматривает _rectangle, как алиас к _rectang и событие не генерирует.
Т.е проблема в _rectangle, ибо нет такой команды.
__________________
...в шее моей жилы железные, и лоб мой - медный...

Последний раз редактировалось Pastor, 31.03.2011 в 17:21.
Pastor вне форума  
 
Автор темы   Непрочитано 31.03.2011, 17:10
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Не совсем понятно.
Если имя первой неизвестной команды www и событие происходит дважды, то должно быть напечатано две строчки
Код:
[Выделить все]
Имя неизвестной команды: WWW
Имя неизвестной команды: WWW
А на скрине всего одна такая строчка?
На скрине видно, что в первый раз "неизвестной" является www, а второй автокад почему-то пишет rectang (хотя такая команда есть на самом деле). Т.е. событие генерируется дважды, но команды показываются разные.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 31.03.2011, 17:21
#4
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Команда rectang - есть, а команды rectangle - нет. См пост №2, то что приписано внизу в качестве версии.
Вот лог командной строки в свежеоткрытом автокаде:
Код:
[Выделить все]
AutoCAD menu utilities loaded.
Command: COMMANDLINE

Command: _rectangle
RECTANG
Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]: 
*Cancel*

Command: _rectangle

Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]: 
*Cancel*
Синим выделено отличие между первым и последующими вызовами _rectangle.
__________________
...в шее моей жилы железные, и лоб мой - медный...

Последний раз редактировалось Pastor, 31.03.2011 в 17:33.
Pastor вне форума  
 
Автор темы   Непрочитано 31.03.2011, 17:48
#5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Pastor Посмотреть сообщение
Команда rectang - есть, а команды rectangle - нет. См пост №2, то что приписано внизу в качестве версии.
Ради интереса заменил в коде строку на это:
Код:
[Выделить все]
dwg.SendStringToExecute("_circle 0,0 100 ", false, false, true);
- была создана одна окружность.

Заменил в коде строку на это:
Код:
[Выделить все]
dwg.SendStringToExecute("_rectang 0,0 100,100 ", false, false, true);
- было создано 2 прямоугольника.



п.с. получается, что если использовать _Rectang - всё равно вызов происходит дважды...

Вопрос снят. Копипаст:
Цитата:
[18:03:25] Alexander Rivilis: Я знаю в чем проблема с rectang
[18:03:31] Alexander Rivilis: Всё очень просто.
[18:03:40] Hwd: ?
[18:04:31] Alexander Rivilis: Эта команда определена в rectang.arx, который не грузится автоматом при запуске AutoCAD. Дальше понятно?
[18:04:41] Hwd: да
[18:05:07] Hwd: она после первой попытки подгружается автоматом (в реестре прописано).
[18:05:15] Alexander Rivilis: Ага.
[18:07:06] Hwd: спасибо
[18:07:13] Alexander Rivilis: Кстати там определены обе команды.
P.S. Pastor, благодарю за отклик и участие в вопросе, Александр Ривилис - за точный ответ.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 31.03.2011 в 18:11. Причина: добавил п.с.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Acad 2009; .Net 3.5; UnknownCommand - первый раз после регистрации, событие всегда генерируется дважды.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск