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

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

Получение координат выделенного объекта

Ответ
Поиск в этой теме
Непрочитано 05.11.2010, 12:13 #1
Получение координат выделенного объекта
НовичOK
 
Регистрация: 05.11.2010
Сообщений: 4

Здравствуйте.

Я хотел бы попросить помощи по следующему вопросу. Мне необходимо написать DLL сборку для Autocad на языке C#, которая бы возвращала значение координат выделенного графического примитива.

Т. е. алгоритм такой:
1. Загружаем сборку
2. Выделяем нужный графический объект
3. получаем его координаты.

я смог сделать только следующее:
Код:
[Выделить все]
using System;
using SWF = System.Windows.Forms;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

[assembly: CommandClass(typeof(MyFirstProject1.Class1))]

namespace MyFirstProject1
{
    public class Class1
    {
        [CommandMethod("SObj", CommandFlags.UsePickSet)]
        public static void SelectObj()
        {
            Editor acadDoc = Application.DocumentManager.MdiActiveDocument.Editor;
            Database db = acadDoc.Document.Database;
            PromptSelectionResult SPrompt;
            SPrompt = acadDoc.SelectImplied();
            SelectionSet SSet = null;
       

            using (Transaction Trans = db.TransactionManager.StartTransaction())
            {

                if (SPrompt.Status == PromptStatus.OK)
                {
                    SSet = SPrompt.Value;

                    SWF.MessageBox.Show(string.Format("Выбрано объектов: {0}", SSet.Count.ToString()));
                    foreach (SelectedObject obj in SSet)
                    {
                        if (obj != null)
                        {
                            Entity ent = Trans.GetObject(obj.ObjectId, OpenMode.ForWrite) as Entity;
                            SWF.MessageBox.Show("ID: " + obj.ObjectId.ToString());
                            ent.ColorIndex = 3;
                        }

                    }
                    Trans.Commit();

                }
                else
                {
                    SWF.MessageBox.Show("Объект не выбран");

                }
            }
        }
    }
}
Как мне получить координаты выделенного объекта?

Последний раз редактировалось НовичOK, 05.11.2010 в 17:02.
Просмотров: 3825
 
Непрочитано 05.11.2010, 13:10
1 | #2
Александр Ривилис

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


Код:
[Выделить все]
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Windows;
using AcRx = Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices;
using AcEd = Autodesk.AutoCAD.EditorInput;
using AcDb = Autodesk.AutoCAD.DatabaseServices;
using AcGe = Autodesk.AutoCAD.Geometry;
using AcWin = Autodesk.AutoCAD.Windows;

[assembly: CommandClass(typeof(CsMgdAcad4.Commands))]

namespace CsMgdAcad4
{
    /// <summary>
    /// Summary description for Commands.
    /// </summary>
    public class Commands
    {
        public Commands() {}

        // Define Command "AsdkCmd1"
        [CommandMethod("SObj", CommandFlags.UsePickSet)]
        public static void SelectObj()
        {
            AcEd.Editor ed = AcAp.Application.DocumentManager.MdiActiveDocument.Editor;
            AcDb.Database db = AcAp.Application.DocumentManager.MdiActiveDocument.Database;
            AcEd.PromptSelectionResult res = ed.SelectImplied();
            if (res.Status == AcEd.PromptStatus.OK && res.Value.Count > 0) 
            {
                using (Transaction tr = db.TransactionManager.StartTransaction())  
                {
                    foreach (AcDb.ObjectId id in res.Value.GetObjectIds()) 
                    {
                        AcDb.Entity ent = tr.GetObject(id, AcDb.OpenMode.ForRead) as AcDb.Entity;
                        if (ent != null)
                        {
                            ed.WriteMessage("Class={0} Handle={1}", ent, id.Handle);
                            AcDb.Polyline pline = ent as AcDb.Polyline;
                            if (pline != null)
                            {
                                int nVertex = pline.NumberOfVertices; // Количество вершин полилинии
                                for (int i = 0; i < nVertex; i++) 
                                {
                                    AcGe.Point3d p = pline.GetPoint3dAt(i); // Получаем очередную вершину
                                    ed.WriteMessage("\n\tp[{0}]={1}", i, p);
                                }
                            }
                            else
                            {
                                ed.WriteMessage("\nЭто не полилиния!");
                            }
                        }
                    }
                }
            }
            else
            {
                ed.WriteMessage("\nНичего не выбрано!");
            }
        }
    }
}
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 05.11.2010, 14:13
#3
НовичOK


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


спасибо Вам огромное
НовичOK вне форума  
 
Непрочитано 05.11.2010, 14:26
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


На переименование темы в соответствии с правилами форума - 12 часов.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Получение координат выделенного объекта



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
1. AutoCAD Кулик Алексей aka kpblc FAQ: Часто задаваемые вопросы 25 27.09.2016 13:29
Правило формирование записей в реестре об установленных обновлениях для 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