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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Как правильно повесить событие на открытие документа?

C# Как правильно повесить событие на открытие документа?

Ответ
Поиск в этой теме
Непрочитано 23.07.2013, 15:23 #1
C# Как правильно повесить событие на открытие документа?
Sfinks7s1
 
VB, C++, C#, Java
 
Санкт-Петербург
Регистрация: 19.04.2013
Сообщений: 48

Существует метод,

Код:
[Выделить все]
[CommandMethod("RefreshXREF")]
        public void RefreshXREF()
        {
            var editor = Application.DocumentManager.MdiActiveDocument.Editor;
            Document doc = Application.DocumentManager.MdiActiveDocument;
            //Для русской версии AutoCAD
            doc.SendStringToExecute(".-ССЫЛКА О * " + "\n", true, false, false);
            doc.SendStringToExecute(".-ИЗОБ О * " + "\n", true, false, false);
            editor.WriteMessage("\n Внешние ссылки обновлены.");
        }
с помощью которого произвожу обновление или "Повтор загрузки внешних ссылок".
Если запускаю код по команде, то всё в порядке, обновление происходит корректно.
Если вызываю метод по событию "DocumentActivated", то при переключении между окнами чертежей обновление тоже происходит корректно,
но если вызов происходит при открытии документа, то метод отрабатывает, но обновления внешних ссылок не происходит.

Как правильно повесить событие на открытие документа?

Код:
[Выделить все]
[CommandMethod("AddEvent")]
        public void AddEvent()
        {
            Application.DocumentManager.DocumentActivated += new DocumentCollectionEventHandler(docRefresh);
        }
        //Вызов реакции на событие
        public void docRefresh(object senderObj, DocumentCollectionEventArgs docColDocActEvtArgs)
        {
            RefreshXREF();
        }
Просмотров: 4421
 
Непрочитано 23.07.2013, 15:42
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Цитата:
Сообщение от Sfinks7s1 Посмотреть сообщение
doc.SendStringToExecute(".-ССЫЛКА О * " + "\n", true, false, false);
doc.SendStringToExecute(".-ИЗОБ О * " + "\n", true, false, false); ....
Как правильно повесить событие на открытие документа?
Тут правильней будет написать как и для чего нужно программировать на .Net под автокад.
з.ы. По моему Вам вобще повезло что этот код не закончился фаталом...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 23.07.2013, 15:59
#3
Sfinks7s1

VB, C++, C#, Java
 
Регистрация: 19.04.2013
Санкт-Петербург
Сообщений: 48
Отправить сообщение для Sfinks7s1 с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
По моему Вам вообще повезло что этот код не закончился фаталом...
Просто как программно сказать автокаду "Reload All References" я не понял,
решил временно посылать команду в консоль.
Пробовал через Send Command, вот он фаталит..
Sfinks7s1 вне форума  
 
Непрочитано 23.07.2013, 18:03
1 | #4
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Sfinks7s1 Посмотреть сообщение
Просто как программно сказать автокаду "Reload All References" я не понял,
Здесь выгрузка, но суть та же: http://adndevblog.typepad.com/autoca...reference.html
Еще минута поиска - и вот оно: http://adndevblog.typepad.com/autoca...rough-net.html
Do$ вне форума  
 
Непрочитано 23.07.2013, 23:58
1 | #5
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813


Цитата:
Сообщение от Do$ Посмотреть сообщение
C# Как правильно повесить событие на открытие документа?
Можно попробовать на Арбат через Кунцево:
Код:
[Выделить все]
;;__________________________________________________;;
	;;вставить в acad.lsp
 	(defun c:YOUCH()
 	(SETVAR "CMDECHO" 0) 
 	(SETVAR "FILEDIA" 0) 
 	(command "._netload" "C:\\.....\\bin\\Release\\myProg.dll" "XrefUnload") ;<-- полный путь .dll и имя команды
 	(SETVAR "CMDECHO" 1) 
 	(SETVAR "FILEDIA" 1) 
 	(princ)
	)

	(defun-q my_Loader ()
	 (SETVAR "CMDECHO" 0)
                  (c:YOUCH)
	 (SETVAR "CMDECHO" 1)(princ)
	)

	(setq S::STARTUP (append S::STARTUP my_Loader ))

;;__________________________________________________;;


//__________________________________________________//
// в сборке:
   public class Commands
    {
        [CommandMethod("XrefUnload", CommandFlags.Modal)]
        public void testRun()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            string folder = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("dwgprefix").ToString();
            if (folder.StartsWith(@"C:\Test\MyWorkingFolder", StringComparison.CurrentCulture))
            {
                Editor ed = doc.Editor;
                ed.Command("_testXref");//<-- имя команды
            }
        }
// в этом же классе Commands
 [CommandMethod("testXref")]

        static public void UnloadXrefs()
        {

            Document doc = Application.DocumentManager.MdiActiveDocument;

            Database db = doc.Database;

            Editor ed = doc.Editor;

            try
            {

                using (Transaction tr = db.TransactionManager.StartTransaction())
                {
                // твой дальнейший код здесь....

	tr.Commit();
                }
          }
     }
}
_________________________________________________________________

	// отдельный класс расширения методов редактора
	// by gile
	// credits to Tony Tanzillo
	// http://www.theswamp.org/index.php?topic=43113.msg483306#msg483306
    	static class MyEditorExtensions
    	{

        	static MethodInfo runCommand = typeof(Editor).GetMethod(
           	"RunCommand", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);

       	 public static PromptStatus Command(this Editor ed, params object[] args)
       	 {
           	 if (Application.DocumentManager.IsApplicationContext)
               	 throw new InvalidOperationException("Invalid execution context for Command()");
            	if (ed.Document != Application.DocumentManager.MdiActiveDocument)
               	 throw new InvalidOperationException("Document is not active");
            	return (PromptStatus)runCommand.Invoke(ed, new object[] { args });
       	 }
              }
          }

___________________________________________
смотри также для версии выше 2013:
http://adndevblog.typepad.com/autoca...-security.html
Олег (jr.) вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > C# Как правильно повесить событие на открытие документа?

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Нужно на событие завершения открытия документа выполнить нек. команды Phelicks Программирование 2 19.11.2009 15:27