AUTOCAD 2012 на C# Visual Studio.

Автор Тема: AUTOCAD 2012 на C# Visual Studio.  (Прочитано 36295 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
AUTOCAD 2012 на C# Visual Studio.
« : 22-09-2014, 15:14:12 »
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.Geometry;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.EditorInput;
  6.  
  7. namespace rabota
  8. {
  9.      
  10.  public class rabota
  11.  
  12.  {
  13.            [CommandMethod("Start")]
  14.                       public void addStart()
  15.      {              
  16.            
  17.             Database dbCurrent = Application.DocumentManager.MdiActiveDocument.Database;
  18.  
  19.            
  20.             using (Transaction trAdding = dbCurrent.TransactionManager.StartTransaction())
  21.             {
  22.                
  23.                 Circle cNewCircle = new Circle();
  24.                 cNewCircle.Center = new Point3d(0, 0, 0);
  25.                 cNewCircle.Radius = 100;
  26.                 cNewCircle.ColorIndex = 5;
  27.  
  28.              
  29.                 BlockTableRecord btrCurrSpace = trAdding.GetObject
  30.                         (dbCurrent.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
  31.  
  32.                 ObjectId oidCircle = btrCurrSpace.AppendEntity(cNewCircle);
  33.                 trAdding.AddNewlyCreatedDBObject(cNewCircle, true);
  34.  
  35.              
  36.                 trAdding.Commit();
  37.             }
  38.         }
  39.  
  40.     }
  41. }

Хотел узнать можно ли прикрепить таймер, что бы программа выполнялась каждые 10 секунд.
« Последнее редактирование: 22-09-2014, 15:28:19 от Александр Ривилис »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #1 : 22-09-2014, 15:23:02 »
не забывай в редакторе сообщений свой код размещать в соответствующих тэгах, дабы отображалась подсветка синтаксиса.
Цитировать
Хотел узнать можно ли прикрепить таймер, что бы программа выполнялась каждые 10 секунд.
Встречный вопрос: а зачем тебе это? В чём смысл сего действа?

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #2 : 22-09-2014, 15:32:10 »
Встречный вопрос: а зачем тебе это? В чём смысл сего действа?

Нужно для проекта, мне нужно было создание произвольного примитива в произвольном месте чертежа в момент события на текущем листе. Теперь задачу упростили. Мне нужно что бы каждое н-ое количество времени на текущем листе рисовался примитив, допустим круг. В этот момент пользователь должен просто работать в автокад.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #3 : 22-09-2014, 15:33:49 »
Нужно для проекта,
Это понятно, что "для проекта". Польза в чём? Где применимо? На данный момент времени это смахивает на попытку написать код, который должен мусорить в чертеже и мешать пользователю работать.

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #4 : 22-09-2014, 15:36:39 »
Это понятно, что "для проекта". Польза в чём? Где применимо? На данный момент времени это напоминает попытку написать код, который должен мусорить в чертеже и мешать пользователю работать.
Если быть честным, то точно я ответить не могу. Как мне было сказано, нужно проверить не ляжет ли программа и можно ли вообще использовать это.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #5 : 22-09-2014, 15:38:25 »
Если быть честным, то точно я ответить не могу.
В таком случае я делаю вывод, что моё предположение верно... Как следствие - от меня помощи в этом "проекте" не будет.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #6 : 22-09-2014, 15:40:11 »
Ну, в таком случае я делаю вывод, что моё предположение верно. Следовательно от меня помощи в этом не будет.
Думаю что всё намного проще. Программа должна опрашивать "что-то" и при получении новых данных рисовать в AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #7 : 22-09-2014, 15:42:22 »
Думаю что всё намного проще. Программа должна опрашивать "что-то" и при получении новых данных рисовать в AutoCAD.
Автор не указывал, что AutoCAD должен работать как сервер, получающий команду из вне и выполняющий запрошенные операции. Я такое делал - с одного компьютера запускал команды (из обычного консольного exe), которые отправлялись на консоль AutoCAD, расположенного на удалённой рабочей машинке. AutoCAD выполнял эти команды.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #8 : 22-09-2014, 15:44:26 »
Автор не указывал, что AutoCAD должен работать как сервер
То, что я предположил - это не работа AutoCAD в режиме сервера.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #9 : 22-09-2014, 15:46:40 »
Думаю что всё намного проще. Программа должна опрашивать "что-то" и при получении новых данных рисовать в AutoCAD.
Верно, задача была в этом.

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #10 : 22-09-2014, 15:52:10 »
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
 
namespace rabota
{
     
 public class rabota
 
 {
           [CommandMethod("Start")]
                      public void addStart()
     {             
           
            Database dbCurrent = Application.DocumentManager.MdiActiveDocument.Database;
 
           
            using (Transaction trAdding = dbCurrent.TransactionManager.StartTransaction())
            {
               
                Circle cNewCircle = new Circle();
                cNewCircle.Center = new Point3d(0, 0, 0);
                cNewCircle.Radius = 100;
                cNewCircle.ColorIndex = 5;
 
             
                BlockTableRecord btrCurrSpace = trAdding.GetObject
                        (dbCurrent.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
 
                ObjectId oidCircle = btrCurrSpace.AppendEntity(cNewCircle);
                trAdding.AddNewlyCreatedDBObject(cNewCircle, true);
 
             
                trAdding.Commit();
            }
        }
 
    }
}


Пытаюсь сделатьтак
Код - C# [Выбрать]
  1.   Timer myTimer = new Timer();
  2.             myTimer.Elapsed += new ElapsedEventHandler("что нужно указать???");
  3.             myTimer.Interval = 10000;
  4.             myTimer.Start();
« Последнее редактирование: 22-09-2014, 18:24:52 от bakaIIHX »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #11 : 22-09-2014, 18:37:51 »
1. Используй тэги код для форматирования программы, иначе их очень затруднительно читать:


2. В таком виде как ты хочешь, а именно из события таймера, ты не сможешь это сделать. Причина этого - AutoCAD .NET API не потокобезопасный.
Но это не значит, что ничего сделать нельзя. Это можно сделать из других событий AutoCAD .NET API, когда AutoCAD свободен.
Например, в событии Editor.EnteringQuiescentState. Таким образом сценарий может быть таким:
1) В событии таймера ты готовишь информацию для отрисовки примитивов и выставляешь флажок.
2) В событии Editor.EnteringQuiescentState ты проверяешь этот флажок и если он true, то отрисовываешь примитивы и флажок снимаешь. При этом следует учесть, что в событии Editor.EnteringQuiescentState следует блокировать документ, который собираешься модифицировать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #12 : 22-09-2014, 18:56:56 »
2. В таком виде как ты хочешь, а именно из события таймера, ты не сможешь это сделать. Причина этого - AutoCAD .NET API не потокобезопасный.
Но это не значит, что ничего сделать нельзя. Это можно сделать из других событий AutoCAD .NET API, когда AutoCAD свободен.
Например, в событии Editor.EnteringQuiescentState. Таким образом сценарий может быть таким:
1) В событии таймера ты готовишь информацию для отрисовки примитивов и выставляешь флажок.
2) В событии Editor.EnteringQuiescentState ты проверяешь этот флажок и если он true, то отрисовываешь примитивы и флажок снимаешь. При этом следует учесть, что в событии Editor.EnteringQuiescentState следует блокировать документ, который собираешься модифицировать.

Жаль, что более простой способ тут не поможет. А можно более подробнее про таймер и флажок.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #13 : 22-09-2014, 18:57:53 »
А можно более подробнее про таймер и флажок.
Хорошо. Я подготовлю небольшой пример и выложу его.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bakaIIHXАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 59
  • Карма: 1
Re: AUTOCAD 2012 на C# Visual Studio.
« Ответ #14 : 22-09-2014, 19:05:55 »
Хорошо. Я подготовлю небольшой пример и выложу его.

Спасибо за помощь.