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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > С# + Autocad COM

С# + Autocad COM

Ответ
Поиск в этой теме
Непрочитано 27.04.2011, 01:02 #1
С# + Autocad COM
Semvad
 
Проектирование КЖ,КМ,КД,КР и т.д.
 
СПб
Регистрация: 17.11.2006
Сообщений: 450

Разбираюсь с С# в связке с Автокадом.
Пытаюсь начертить линию в Автокад через COM.
В чем проблема? (Просьба с ходу не нападать, только разбираюсь с самим С#).
Исходники и исполняемый файл прикладываю.
Если у кого-то есть исходники с примером связки, буду очень благодарен.

Form1.cs(в комментариях внизу код Александра Ривилиса, который нашел на форуме.):
Код:
[Выделить все]
//using Autodesk.AutoCAD.Runtime;
//using Autodesk.AutoCAD.ApplicationServices;
//using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //AcadApplication acad = GetOrCreateAcadInstance();
            //if (acad != null)
            //{
                // Здесь уже можно работать с AutoCAD
                // например:
            AcadApplication acad = new AcadApplication();
            acad.Visible = true;
            //AcadDocument ACDOC = new AcadDocument();
            //Object oMissing = System.Reflection.Missing.Value;
           
                
                double[] Startx= new double [3];
                Startx [1]= 10;
                Startx [2]= 10;
                Startx [3]= 0;
                

                double[] Endx= new double [3];
                Endx [1]= 20;
                Endx [2]= 20;
                Endx [3]= 0;

                acad.ActiveDocument.ModelSpace.AddLine(Startx, Endx);

               
            //}
        }

   //public static AcadApplication GetOrCreateAcadInstance() 
   // {
   //   AcadApplication acad = null;
   //   try {
   //     acad = (AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
   //   }
   //   catch {
   //     try { acad = new AcadApplication(); } catch {}
   //   }
   //   return acad;
   // }

    }
}
п.с. И еще вопрос, какие плюсы и минусы, кроме скорости, у Net по сравнению с COM (не зависит ли сборка NET от версии Автокада)?

Visual С# express 2010

Вложения
Тип файла: rar Autocad_apl.rar (5.1 Кб, 86 просмотров)
Тип файла: rar Autocad_apl_code.rar (67.6 Кб, 87 просмотров)

Просмотров: 7116
 
Непрочитано 27.04.2011, 08:39
#2
hwd

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


Цитата:
Сообщение от Semvad Посмотреть сообщение
п.с. И еще вопрос, какие плюсы и минусы, кроме скорости, у Net по сравнению с COM (не зависит ли сборка NET от версии Автокада)?
Насчёт скорости:
Джеффри Рихтер в своей книге "CLR via C#" пишет, что совсем не факт, что .net всегда медленнее COM, а если медленнее, то весьма незначительно, ибо:
1. Падение производительности наблюдается только при первой jit-компиляции. При последующем обращении к данному сегменту кода используется результат предыдущей компиляции.
2. Динамическая компиляция осуществляется с максимально возможным учётом архитектуры центрального процессора, используя его "козырные" способности. Неуправляемый код ориентирован на статистическую, усреднённую модель процессора, не используя все его возможности.
3. Скорость работы JIT-компилятора в .net весьма хорошая и от версии к версии его дополнительно совершенствуют.

Т.о. .net может быть медленнее com при первой jit-компиляции, но затем обогнать его по ходу работы программы, за счёт своей адаптации под процессор компьютера.

Цитата:
Сообщение от Semvad Посмотреть сообщение
п.с. И еще вопрос, какие плюсы и минусы, кроме скорости, у Net по сравнению с COM
Основные плюсы:
1. Огромный набор библиотек и технологий на любую тему
2. Писать можно на любом .net-языке, причём код, написанный на одном, совершенно спокойно можно расширять на другом (к примеру наследоваться в C# от класса, написанного на VB.NET)
3. Кроссплатформенность (Windows/Linux/MacOS).

Цитата:
Сообщение от Semvad Посмотреть сообщение
не зависит ли сборка NET от версии Автокада?
Зависит, но это обусловлено тем, что под каждую версию AutoCAD компания Autodesk компилирует очередную версию библиотек, внося в них существенные изменения от версии к версии.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 27.04.2011, 08:40
#3
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Чего я углядел:
1. Нумерация элементов массива начинается с 0, а не с 1.
2. Выполнено раннее связывание, а можно использовать и позднее: http://kpblc.blogspot.com/2011/04/preferences.html
P.S. ПОявится hwd, он тут быстренько камня на камне не оставит
Offtop: P.P.S. Во, а вот и он hwd, когда сайт-то твой заработает?
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 27.04.2011, 08:45
#4
hwd

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


Цитата:
Сообщение от Лиспер Посмотреть сообщение
hwd, когда сайт-то твой заработает?
Offtop: Не скоро. Потихоньку занимаюсь форматированием (в свободное время по вечерам). Страниц много...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 27.04.2011, 08:56
#5
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Offtop: Да забей ты на форматирование, пусть будет хоть что-то... Ну невозможно же! Единственный ресурс, где была информация - и тот закрыт :cry:
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Непрочитано 27.04.2011, 09:16
#6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Недостатки COM по сравнению с .NET в AutoCAD (имеется в виду использование Autodesk.AutoCAD.Interop, а не acdbmgd.dll и acmgd.dll):
1. Меньше скорость в подавляющем большинстве случаев.
2. COM-модель практически не развивается и многих вещей в ней просто нет и уже никогда не будет (например, получение точек на кривой)

Достоинства COM по сравнению с .NET:
1. Возможность работы из другого приложения (т.е. создание exe-файла), которое запускает AutoCAD и управляет им. Иногда бывает полезным.
В .NET-сборке, загружаемой в AutoCAD можно использовать оба варианта работы. Иногда без использования COM не обойтись.
Александр Ривилис вне форума  
 
Непрочитано 27.04.2011, 10:18
#7
Дима_

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Достоинства COM по сравнению с .NET:
1. Возможность работы из другого приложения (т.е. создание exe-файла), которое запускает AutoCAD и управляет им. Иногда бывает полезным.
А что мешает это сделать на Net?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.04.2011, 13:01
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А что мешает это сделать на Net?
Ты не внимательно прочитал моё сообщение. Под COM в своем сообщении я подразумевал работу через ActiveX/COM и не важно в чем (VBA/VB/C++/.NET...), под .NET я подразумевал использование managed сборок AutoCAD. Собственно говоря именно так я воспринял вопрос топикстартера.
Александр Ривилис вне форума  
 
Непрочитано 27.04.2011, 13:29
#9
Дима_

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


Offtop: Я почему-то прочитав 1 пункт
Цитата:
(имеется в виду использование Autodesk.AutoCAD.Interop, а не acdbmgd.dll и acmgd.dll)
увидел (да и сейчас вижу) смысл ровно наоборот - не суть - в таком ключе вопросов нет.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.04.2011, 14:11
#10
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Дима. COM - Autodesk.AutoCAD.Interop, .NET - acdbmgd.dll и acmgd.dll
Или с точки зрения русского языка я не так выразился?
Александр Ривилис вне форума  
 
Непрочитано 27.04.2011, 14:32
#11
Дима_

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


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Дима. COM - Autodesk.AutoCAD.Interop, .NET - acdbmgd.dll и acmgd.dll
Или с точки зрения русского языка я не так выразился?
Offtop: Скорее я с точки зрения русского языка не так понимаю.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 27.04.2011, 15:12
#12
nikе

конструктор Лего
 
Регистрация: 21.10.2005
Краснодар
Сообщений: 204


По-моему, начало должно быть таким (для Bricscad V10):
const string progIDstr = "BricscadApp.AcadApplication.10.0";

AcadApplication app = null;


app = (AcadApplication)Marshal.GetActiveObject(progIDstr);
app.Visible = true;
AcadDocument doc = app.ActiveDocument;
nikе вне форума  
 
Непрочитано 27.04.2011, 15:39
#13
hwd

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


Цитата:
Сообщение от nikе Посмотреть сообщение
для Bricscad
Любопытно... Жаль только что .net api под него нет, к сожалению...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 27.04.2011, 16:33
#14
nikе

конструктор Лего
 
Регистрация: 21.10.2005
Краснодар
Сообщений: 204


->hwd
Под Bricscad уже есть .NET API beta версия... Но т.к. у меня Bricacad Classic, то меня больше интересует COM API.
nikе вне форума  
 
Автор темы   Непрочитано 27.04.2011, 22:47
#15
Semvad

Проектирование КЖ,КМ,КД,КР и т.д.
 
Регистрация: 17.11.2006
СПб
Сообщений: 450
<phrase 1= Отправить сообщение для Semvad с помощью Skype™


Спасибо большое всем ответившим!
Semvad вне форума  
 
Непрочитано 29.04.2011, 00:47
#16
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


Цитата:
Сообщение от Semvad Посмотреть сообщение

Visual С# express 2010
А разве на Express под AutoCAD можно писать? Вроде как полная "студия" должна быть
AlexSheep вне форума  
 
Непрочитано 29.04.2011, 08:07
#17
hwd

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


Цитата:
Сообщение от AlexSheep Посмотреть сообщение
А разве на Express под AutoCAD можно писать? Вроде как полная "студия" должна быть
тынц
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 29.04.2011, 13:29
#18
AlexSheep


 
Регистрация: 08.09.2010
Москва
Сообщений: 28


Цитата:
Сообщение от hwd Посмотреть сообщение
угу. Понято. Спасибо
Offtop: По-началу подумал что Вы свой сайт всётаки допилили и запустили... да еще и на английском... да еще и с доменом autodesk.com
AlexSheep вне форума  
 
Непрочитано 29.04.2011, 13:38
#19
hwd

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


Цитата:
Сообщение от AlexSheep Посмотреть сообщение
подумал что Вы свой сайт всётаки допилили и запустили
Offtop: там ещё пилить и пилить
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > С# + Autocad COM



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
Интеграция Autodesk СПДС в AutoCAD 2012 bolotov Прочее. Программное обеспечение 24 07.01.2013 20:22
Правило формирование записей в реестре об установленных обновлениях для AutoCAD и его вертикальных решений. hwd Программирование 8 30.09.2010 15:07
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
Информация по идентификационным кодам программ в сетевых лицензиях Autodesk KSI AutoCAD 1 14.09.2009 15:59