Получение координат примитивов в Регионе (AcadRegion), C#
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Получение координат примитивов в Регионе (AcadRegion), C#

Получение координат примитивов в Регионе (AcadRegion), C#

Ответ
Поиск в этой теме
Непрочитано 13.05.2010, 14:43 #1
Получение координат примитивов в Регионе (AcadRegion), C#
AkaPaul
 
Регистрация: 09.05.2010
Сообщений: 5

Здравствуйте! Помогите пожалуйста разобраться со следующей проблемой.

Пишу приложение на C#, которое загружает Автокад как объект COM и затем работает с ним. У меня имеется фигура (регион), координаты которой необходимо получить. Проблема в том, что у простых примитивов, таких как AcadLine, AcadLWPolyline имеются свойства для получения координат (StartPoint/EndPoint, Coordinates соответственно). А для AcadRegion такого свойства нет . Собственно вопрос: как можно получить координаты примитивов.

На этом сайте нашел описание всех свойств и методов, среди них выделил Explode, но есть ли способ попроще?

Чтобы было понятнее, приведу код моего метода открытия документа:

Код:
[Выделить все]
//стыковка с Autocad

public void OpenDrawing() //открытие документа
        {
            double[] Coordinates;
            string str="";
            openFileDialog.CheckFileExists = true;
            openFileDialog.CheckPathExists = true;
            openFileDialog.Filter = "Autocad *.dwg|*.dwg|All files (*.*)|*.*";
            openFileDialog.FilterIndex = 0;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                strFileName = openFileDialog.FileName;

                if (File.Exists(strFileName))
                {
                    AD = AA.Documents.Open(strFileName, false, null);
                }
                else
                {
                    MessageBox.Show("File " + strFileName + " does not exist.");
                    return;
                }
                ms = AD.Database.ModelSpace;
                for (int i = 0; i < ms.Count; i++)
                {
                    switch (ms.Item(i).EntityType)
                    {
                        case 19:
                            line = (AcadLine)ms.Item(i);
                            MessageBox.Show("Found line");
                            break;
                        case 24:
                            lwpolyline = (AcadLWPolyline)ms.Item(i);
                            
                            //Coordinates = lwpolyline.Coordinates as double[];
                            MessageBox.Show("Found polyline. Area: "+lwpolyline.Area.ToString());
                            break;
                        case 28:
                            region = (AcadRegion)ms.Item(i);
                            // здесь должны получаться координаты region
                        default:
                            str += ms.Item(i).EntityType.ToString() + ": " + ms.Item(i).EntityName + "\r\n";
                            break;
                    }
                    if (str.Length!=0)
                    {
                        MessageBox.Show(str);
                    }
                }

                //Coordinates = line.EndPoint as double[];//.StartPoint;
                //MessageBox.Show("X: " + Coordinates[0].ToString() + "\r\nY: " + Coordinates[1].ToString());
            }
        }
Просмотров: 3707
 
Непрочитано 13.05.2010, 23:36
#2
dvim

ИТ Логистика Строительство
 
Регистрация: 06.10.2009
Петербург
Сообщений: 24
<phrase 1=


http://through-the-interface.typepad...g-a-polyl.html

Все таки там делается очень похожее.
Идея просто в том. что результат можно не сохранять в транзакшн менеджере...
dvim вне форума  
 
Автор темы   Непрочитано 14.05.2010, 10:11
#3
AkaPaul


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


Спасибо! Буду разбираться!
AkaPaul вне форума  
 
Непрочитано 14.05.2010, 12:14
#4
Александр Ривилис

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


Учти:
1. Пример приведен для сборки, которая грузится внутрь AutoCAD, т.е. использует ObjectARX .NET, который из внешнего по отношению к AutoCAD приложению (как в твоем случае) использовать нельзя.
2. В COM-модели AutoCAD метод explode добавляет в чертеж результаты расчленения Region'а, а в приведенном примере - нет.
3. Почитай еще комментарии к примеру.
Александр Ривилис вне форума  
 
Непрочитано 14.05.2010, 14:30
#5
Дима_

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


Как вариант использовать свойствово Centorid или GetBoundingBox.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.05.2010, 18:30
#6
AkaPaul


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


Дима_, в том-то и дело, что надо получить все координаты.
AkaPaul вне форума  
 
Непрочитано 14.05.2010, 22:22
#7
Дима_

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


Тогда только взрывом (желательно копии).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Получение координат примитивов в Регионе (AcadRegion), C#



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение координат из строки состояния V.Khomyakov Программирование 4 09.07.2008 09:19
Получение текстового массива координат точек. Камыч AutoCAD 5 30.07.2007 12:28
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47
управление системой координат Автокад из Делфей Владимир В Программирование 12 27.04.2005 09:54