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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Получить ObjectIDs из Selection Set

Получить ObjectIDs из Selection Set

Ответ
Поиск в этой теме
Непрочитано 01.02.2020, 18:05 #1
Получить ObjectIDs из Selection Set
lesnaya
 
Регистрация: 10.11.2013
Сообщений: 52

Здравствуйте!
Пишу программу на c# для автокда и немного застрял...
Ситуация следующая:
Изначально программа предлагает выбрать объект или нарисовать по заданным размерам.
В случае если выбирается существующий объект нужно его запомнить чтобы позже была возможность к нему обратиться (нужны будут размеры и координаты), вопрос как получить эти данные зная только ObjectId (хотя бы точки углов полилинии).

И еще вопрос, если будет выбрано нарисовать новый объект, затем условно рисуется прямоугольник, как мне получить его ObjectID?

Последний раз редактировалось lesnaya, 01.02.2020 в 20:21.
Просмотров: 6971
 
Непрочитано 01.02.2020, 21:58
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Вы хоть на .Net API пишете?
Цитата:
Сообщение от lesnaya Посмотреть сообщение
В случае если выбирается существующий объект нужно его запомнить чтобы позже была возможность к нему обратиться (нужны будут размеры и координаты), вопрос как получить эти данные зная только ObjectId (хотя бы точки углов полилинии).
Запрашиваете GetEntity класса Editor, там ObjectId и получите. Далее в текущей сессии открытого чертежа всегда можете получить по ObjectId сам примитив и сграбить оттуда всю нужную информацию.

Цитата:
Сообщение от lesnaya Посмотреть сообщение
И еще вопрос, если будет выбрано нарисовать новый объект, затем условно рисуется прямоугольник, как мне получить его ObjectID?
метод SelectLast того же класса можете попробовать.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.02.2020, 22:57
#3
lesnaya


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Вы хоть на .Net API пишете?
Если правильно понимаю, то нет, пишу в class library..
В автокаде работаю уже очень давно и захотелось расширить функционал, программирование тоже интересно, по видео урокам ознакомился в c# и далее по автокадовскому справочнику пытаюсь разобраться...
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Запрашиваете GetEntity класса Editor, там ObjectId и получите. Далее в текущей сессии открытого чертежа всегда можете получить по ObjectId сам примитив и сграбить оттуда всю нужную информацию.
Вот в этом то и вопрос. Я получил Selection Set и надеюсь что успешно достал из него ObjectId (проблема была в том, что getObjectIds выдает ObjectIds[], а мне нужен именно мой Entity, который был выделен, как я понимаю для перебора данных можно использовать foreach, либо если есть уверенность что был выбран один Entity, тогда можно обратиться через ObjectIds[0].) Но не могу разобраться как мне после получения ObjectId вытащить свойства этого Entity.. Сначала нужно открыть ForRead, а что потом ?
lesnaya вне форума  
 
Непрочитано 01.02.2020, 23:09
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Код:
[Выделить все]
 
Document lAcadDoc = Application.DocumentManager.MdiActiveDocument;
Database lAcadDb = lAcadDoc.Database;
Editor lAcadEd = lAcadDoc.Editor;
// Запрашиваем примитив
PromptEntityResult lPromptEntityResult = lAcadEd.GetEntity("\nВыберите примитив:");
// Если пользователь выбрал
if (lPromptEntityResult.Status == PromptStatus.OK)
{
    в lPromptEntityResult.ObjectId - идентификатор выбранного примитива на время сессии открытого чертежа. 
Если нужен конкретный примитив - так и выбирайте его.

----- добавлено через ~11 мин. -----
Цитата:
Сообщение от lesnaya Посмотреть сообщение
либо если есть уверенность что был выбран один Entity, тогда можно обратиться через ObjectIds[0].)
есть свойство Count у SelectionSet. Если оно не равно единице - то сообщаете пользователю, что нужно выбрать один объект либо предлагаете выбрать непосредственно примитив.

Цитата:
Сообщение от lesnaya Посмотреть сообщение
Сначала нужно открыть ForRead, а что потом ?
Привести общий object тип, возвращаемый GetObject по ObjectId, к типу вашего примитива.
Сергей812 вне форума  
 
Автор темы   Непрочитано 01.02.2020, 23:27
#5
lesnaya


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


Благодарю за помощь, но там смысл немного в другом был. Изначально предлагается на выбор либо выбрать примитив, либо нарисовать. Если пользователь выбирает, то все окей и остается только понять как уже зная его ID получить информацию о расположении на экране (нужны точки, если это полилиния - нужны координаты всех вершин как минимум).
Если выбираем нарисовать, то рисуется прямоугольник (полилиния). Затем завтра попробую методом SelectLast его выделить и получить ObjectId и далее опять все сводится к тому как получить интересующую меня информацию о примитиве.
lesnaya вне форума  
 
Непрочитано 02.02.2020, 00:41
#6
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от lesnaya Посмотреть сообщение
как уже зная его ID получить информацию о расположении на экране (нужны точки, если это полилиния - нужны координаты всех вершин как минимум).
когда приведете полученный по ObjectId к соответствующему объекту, например, polyline - то и получите координаты всех вершин через GetPoint3dAt .
Сергей812 вне форума  
 
Непрочитано 02.02.2020, 09:57
#7
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588


Я так понимаю, у Вас проблема с непониманием, что такое ObjectId и что с ним потом делать...

Если совсем грубо и образно, то ObjectId это номер/адрес объекта в dwg файле. Сам адрес то не говорит Вам о том, в какие обои оклеены комнаты, для того, что бы это узнать нужно придти по этому адресу и посмотреть.
Тут подробнее: https://sites.google.com/site/bushma...ektov-objectid

Или так, коротенько:
Код:
[Выделить все]
       using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
      {
        Polyline pline = acTrans.GetObject(objectId, OpenMode.ForRead) as Polyline;
        int colorIndex = pline.ColorIndex;
        acTrans.Commit();
      }
хотя мне больше нравиться вот такая форма:
Код:
[Выделить все]
         using (Polyline pline = objectId.Open(OpenMode.ForRead) as Polyline)
        {
          int colorIndex = pline.ColorIndex;
        }
Это одно и тоже по сути... просто записано по разному.
Boxa вне форума  
 
Автор темы   Непрочитано 02.02.2020, 13:34
#8
lesnaya


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


Всем большое спасибо за помощь, все получилось!
Но не стал пользоваться GetEntity, так как так обязательно нужно задавать параметр - сообщение, а когда примитив был выбран до начала команды тогда это не нужно.
В итоге:
Код:
[Выделить все]
    if (acSSPrompt.Status == PromptStatus.OK)
        {
            acSSet = acSSPrompt.Value;
            ObjectId[] idArray = acSSet.GetObjectIds();
            ObjectId id = idArray[0];
            Application.ShowAlertDialog("ObjectId: " + id.ToString());
и когда было выбрано нарисовать :
Код:
[Выделить все]
acSSPrompt = acDocEd.SelectLast();
                // If the prompt status is OK, objects were selected before
                // the command was started
                acSSet = acSSPrompt.Value;
                ObjectId[] idArray = acSSet.GetObjectIds();
                ObjectId id = idArray[0];
                Application.ShowAlertDialog("ObjectId: " + id.ToString());
                using (Polyline pLine = id.Open(OpenMode.ForRead) as Polyline)
                {
                    Point3d vert0 = pLine.GetPoint3dAt(0);
                    Point3d vert1 = pLine.GetPoint3dAt(1);
                    Point3d vert2 = pLine.GetPoint3dAt(2);
                    Point3d vert3 = pLine.GetPoint3dAt(3);
                    Point3d vert4 = pLine.GetPoint3dAt(4);
Потом еще добавлю проверку Selection Set.Count, но поскольку программу пишу для себя, то можно просто иметь в виду что нужно выбирать один примитив.
Очень приятно когда новичка не отправляют искать ответы в интернете (что я конечно и сам пытался сделать), а дают реальные советы. Спасибо

P.S. еще очень интересует использование Transaction manager, вопрос возник после ответа Boxa.
В первом случае с using начинается новая транзакция, а во втором случае сразу открывается полилиния. Как я понимаю, использование Transaction manager требуется в случае когда в одной транзакции нужно обратиться к нескольким объектам.
lesnaya вне форума  
 
Непрочитано 02.02.2020, 14:29
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от lesnaya Посмотреть сообщение
Но не стал пользоваться GetEntity, так как так обязательно нужно задавать параметр - сообщение, а когда примитив был выбран до начала команды тогда это не нужно.
ну так что мешает написать команду с несколькими вариантами выбора примитива?

Код:
[Выделить все]
 
        [CommandMethod("NevedomayFignya", CommandFlags.UsePickSet)]
        public void NevedomayFignya()
        {
            // Идентификатор выбранного примитива
            ObjectId lSelectObjectId = ObjectId.Null;
            // Запрашиваем текущий документ, его БД и редактор
            Document lAcadDoc = Application.DocumentManager.MdiActiveDocument;
            Database lAcadDb = lAcadDoc.Database;
            Editor lAcadEd = lAcadDoc.Editor;
            // Получаем набор предварительного выбора
            PromptSelectionResult lPromptSelectionResult = lAcadEd.SelectImplied();
            // Если выбор успешен
            if (lPromptSelectionResult.Status == PromptStatus.OK)
            {
                // Если выбран один примитив
                if (lPromptSelectionResult.Value.Count == 1)
                {
                    // Получаем его идентификатор
                    lSelectObjectId = lPromptSelectionResult.Value[0].ObjectId;
                }
                else
                {
                    // Выводим сообщение
                    lAcadEd.WriteMessage("\nВыделено более одного примитива на чертеже!\n");
                }
            }
            // Если идентификатор еще не определен
            if (lSelectObjectId.IsNull)
            {
                // Запрашиваем примитив 
                PromptEntityResult lPromptEntityResult = lAcadEd.GetEntity("\nВыберите примитив:");
                // Если пользователь выбрал 
                if (lPromptEntityResult.Status == PromptStatus.OK) lSelectObjectId = lPromptEntityResult.ObjectId;
            }
            // Если был выбран примитив любым способом
            if (!lSelectObjectId.IsNull)
            {
                // Выводим сообщение
                lAcadEd.WriteMessage("\nВыбран примитив с Id = [{0}]", lSelectObjectId.ToString());
            }
            else
            {
                // Выводим сообщение
                lAcadEd.WriteMessage("\nПримитив не был выбран!");
            }
        }

Цитата:
Сообщение от lesnaya Посмотреть сообщение
Point3d vert0 = pLine.GetPoint3dAt(0);
Point3d vert1 = pLine.GetPoint3dAt(1);
Point3d vert2 = pLine.GetPoint3dAt(2);
Point3d vert3 = pLine.GetPoint3dAt(3);
Point3d vert4 = pLine.GetPoint3dAt(4);
а может лучше List<Poind3d> все таки взять?

Цитата:
Сообщение от lesnaya Посмотреть сообщение
P.S. еще очень интересует использование Transaction manager, вопрос возник после ответа Boxa.
В первом случае с using начинается новая транзакция, а во втором случае сразу открывается полилиния. Как я понимаю, использование Transaction manager требуется в случае когда в одной транзакции нужно обратиться к нескольким объектам.
например - обратите внимание на пост 19
Сергей812 вне форума  
 
Автор темы   Непрочитано 02.02.2020, 14:53
#10
lesnaya


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


У меня так и получилось, что разные варианты предлагает на выбор (либо примитив выбран до начала команды, если нет, предлагается выбрать его или нарисовать), но во всех случаях получилось через Selection Set получить ObjectId и далее все ок.
Код:
[Выделить все]
Point2d vert0 = new Point2d();
        Point2d vert1 = new Point2d();
        Point2d vert2 = new Point2d();
        Point2d vert3 = new Point2d();
        // Get the current document and database
        Document acDoc = Application.DocumentManager.MdiActiveDocument;
        Database acCurDb = acDoc.Database;
        Editor acDocEd = Application.DocumentManager.MdiActiveDocument.Editor;
        // Get the PickFirst selection set
        PromptSelectionResult acSSPrompt;
        acSSPrompt = acDocEd.SelectImplied();
        SelectionSet acSSet;
        // If the prompt status is OK, objects were selected before
        // the command was started
        if (acSSPrompt.Status == PromptStatus.OK)
        {
            acSSet = acSSPrompt.Value;
            ObjectId[] idArray = acSSet.GetObjectIds();
            ObjectId id = idArray[0];
            Application.ShowAlertDialog("ObjectId: " + id.ToString());
            using (Polyline pLine = id.Open(OpenMode.ForRead) as Polyline)
            {
                vert0 = pLine.GetPoint2dAt(0);
                vert1 = pLine.GetPoint2dAt(1);
                vert2 = pLine.GetPoint2dAt(2);
                vert3 = pLine.GetPoint2dAt(3);
            }
        }
        else
        {
            // Request selection
            PromptKeywordOptions pKeyOpt = new PromptKeywordOptions("");
            pKeyOpt.Keywords.Add("Draw");
            pKeyOpt.Keywords.Add("Select");
            pKeyOpt.Keywords.Default = "Select";
            pKeyOpt.AllowNone = true;
            PromptResult pKeyRe = acDoc.Editor.GetKeywords(pKeyOpt);

            if (pKeyRe.StringResult.Equals("Select"))
            {
                // Clear the PickFirst selection set
                ObjectId[] idarrayEmpty = new ObjectId[0];
                acDocEd.SetImpliedSelection(idarrayEmpty);
                // Request for objects to be selected in the drawing area
                acSSPrompt = acDocEd.GetSelection();
                // If the prompt status is OK, objects were selected before
                // the command was started
                if (acSSPrompt.Status == PromptStatus.OK)
                {
                    acSSet = acSSPrompt.Value;
                    ObjectId[] idArray = acSSet.GetObjectIds();
                    ObjectId id = idArray[0];
                    Application.ShowAlertDialog("ObjectId: " + id.ToString());
                    using (Polyline pLine = id.Open(OpenMode.ForRead) as Polyline)
                    {
                        vert0 = pLine.GetPoint2dAt(0);
                        vert1 = pLine.GetPoint2dAt(1);
                        vert2 = pLine.GetPoint2dAt(2);
                        vert3 = pLine.GetPoint2dAt(3);
                    }
                }
                else
                {
                    Application.ShowAlertDialog("0 objects selected");
                }
            }
            else
            {
                PromptDoubleOptions pHeightOpts = new PromptDoubleOptions("");
                pHeightOpts.Message = "\nEnter Height, mm: ";
                pHeightOpts.AllowZero = false;
                pHeightOpts.AllowNegative = false;
                pHeightOpts.AllowNone = false;
                PromptDoubleResult pHeight = acDoc.Editor.GetDouble(pHeightOpts);
                double height = pHeight.Value;

                PromptDoubleOptions pWidthOpts = new PromptDoubleOptions("");
                pWidthOpts.Message = "\nEnter Width, mm: ";
                pWidthOpts.AllowZero = false;
                pWidthOpts.AllowNegative = false;
                pWidthOpts.AllowNone = false;
                PromptDoubleResult pWidth = acDoc.Editor.GetDouble(pWidthOpts);
                double width = pWidth.Value;

                PromptPointResult pPtRes;
                PromptPointOptions pPtOpts = new PromptPointOptions("");
                // Prompt for the start point
                pPtOpts.Message = "\nSpecify left bottom corner";
                pPtRes = acDoc.Editor.GetPoint(pPtOpts);
                Point3d ptLeftBot = pPtRes.Value;
                double yTop = ptLeftBot.Y + height;
                double xRight = ptLeftBot.X + width;
                // Exit if the user presses ESC or cancels the command
                if (pPtRes.Status == PromptStatus.Cancel) return;

                using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
                {
                    // Open the Block table for read
                    BlockTable acBlkTbl;
                    acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                                                    OpenMode.ForRead) as BlockTable;

                    // Open the Block table record Model space for write
                    BlockTableRecord acBlkTblRec;
                    acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                                    OpenMode.ForWrite) as BlockTableRecord;

                    // Create a polyline with two segments (3 points)
                    using (Polyline acPoly = new Polyline())
                    {
                        acPoly.AddVertexAt(0, new Point2d(ptLeftBot.X, ptLeftBot.Y), 0, 0, 0);
                        acPoly.AddVertexAt(1, new Point2d(ptLeftBot.X, yTop), 0, 0, 0);
                        acPoly.AddVertexAt(2, new Point2d(xRight, yTop), 0, 0, 0);
                        acPoly.AddVertexAt(3, new Point2d(xRight, ptLeftBot.Y), 0, 0, 0);
                        acPoly.AddVertexAt(4, new Point2d(ptLeftBot.X, ptLeftBot.Y), 0, 0, 0);

                        // Add the new object to the block table record and the transaction
                        acBlkTblRec.AppendEntity(acPoly);
                        acTrans.AddNewlyCreatedDBObject(acPoly, true);
                    }

                    // Save the new object to the database
                    acTrans.Commit();
                }

                acSSPrompt = acDocEd.SelectLast();
                // If the prompt status is OK, objects were selected before
                // the command was started
                acSSet = acSSPrompt.Value;
                ObjectId[] idArray = acSSet.GetObjectIds();
                ObjectId id = idArray[0];
                Application.ShowAlertDialog("ObjectId: " + id.ToString());
                using (Polyline pLine = id.Open(OpenMode.ForRead) as Polyline)
                {
                    vert0 = pLine.GetPoint2dAt(0);
                    vert1 = pLine.GetPoint2dAt(1);
                    vert2 = pLine.GetPoint2dAt(2);
                    vert3 = pLine.GetPoint2dAt(3);
                }
            }

        }

Насчет List тоже думал, но не хватило, видимо, знания С#... Проблема в том что прямоугольник может быть нарисован путем задания 5 вершин где последняя совпадает с первой (5 вершин) и путем задания 4 вершин и затем "close" (4 вершины). Поэтому при запросе 5 вершины у меня автокад начал ругаться. И как раз появилась идея сделать через List чтобы можно было узнать pLine.NumberOfVertices и исходя из этого добавить в List нужное количество вершин. Хотел это как-то в цикл for запихнуть, но не знаю как обратиться к элементу, нужно было что-то вроде vert[i] вместо vert0, vert1 и тд... В итоге просто отказался от пятой точки потому что она либо есть, либо нет, но в любом случае совпадает с первой. Это первая программа, так что за красотой пока не гонюсь, главное чтобы работала.
lesnaya вне форума  
 
Непрочитано 02.02.2020, 15:03
#11
Кулик Алексей aka kpblc
Moderator

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


lesnaya, а что потом с этими точками предполагается делать? Мне просто интересно.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 02.02.2020, 15:11
#12
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


Цитата:
Сообщение от lesnaya Посмотреть сообщение
как обратиться к элементу, нужно было что-то вроде vert[i] вместо vert0, vert1 и тд...
ну так List<T> и представляет собой обертку над массивом. Массивы, как и строки, в C# является неизменными - нельзя взять и изменить их размер. List<T> скрывает внутри себя работу с массивом, и предоставляет индексированное свойство:

Код:
[Выделить все]
 List<Point3d> vert = new List<Point3d>();
и дальше добавляете любое количество точек vert.Add(%Точка%)
и получаете по индексу любую точку vert[Index = диапазон 0...Count-1]
Сергей812 вне форума  
 
Автор темы   Непрочитано 02.02.2020, 15:29
#13
lesnaya


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
lesnaya, а что потом с этими точками предполагается делать? Мне просто интересно.
Потом по размерам прямоугольника (скажем, это проем в стене) рисуются отверстия выбранного диаметра (круги), это для рисования схем по алмазному бурению ж/б конструкций, каждый раз приходится рассчитывать расстояния между отверстиями, а когда объем работы большой, лучше я позволю это сделать своей программе.


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и дальше добавляете любое количество точек vert.Add(%Точка%)
и получаете по индексу любую точку vert[Index = диапазон 0...Count-1]
Спасибо, постараюсь применить позже.

----- добавлено через ~2 ч. -----
Еще раз вынужден обратиться за помощью.
Так как полилиния может быть нарисована разными способами, мне нужно упорядочить вершины прямоугольника. Входные данные метода - координаты вершин, далее они собираются в List и я пытаюсь его упорядочить с помощью метода Sort с IComparer. На выходе хочу получить List где будут координаты углов по часовой стрелке, начиная с левого нижнего. Но пока срабатывает через раз.

Код:
[Выделить все]
    public static List<Point3d> GetCorners(Point2d vert0, Point2d vert1, Point2d vert2, Point2d vert3)
    {
        List<Point3d> vert = new List<Point3d>();
        Point3d point0 = new Point3d(vert0.X, vert0.Y, 0);
        Point3d point1 = new Point3d(vert1.X, vert1.Y, 0);
        Point3d point2 = new Point3d(vert2.X, vert2.Y, 0);
        Point3d point3 = new Point3d(vert3.X, vert3.Y, 0);
        vert.Add(point0);
        vert.Add(point1);
        vert.Add(point2);
        vert.Add(point3);
        PointComparer pc = new PointComparer();
        vert.Sort(pc);
        return vert;
    }
}
public class PointComparer : IComparer<Point3d>
{
    public int Compare(Point3d x, Point3d y)
    {
        if ((x.X < y.X) || ((x.X == y.X) & !(x.X == x.Y)))
            return -1;
        else
            return 1;

    }
}
P.S. удалось отсортировать вручную через кучу if...else

Последний раз редактировалось lesnaya, 02.02.2020 в 18:28.
lesnaya вне форума  
 
Непрочитано 03.02.2020, 00:38
#14
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,002


а это точно прямоугольник - т.е. фигура с попарно равными и параллельными сторонами и углами по 90гр?
Сергей812 вне форума  
 
Непрочитано 03.02.2020, 06:59
#15
trir


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


http://inis.jinr.ru/sl/vol1/CMC/Prep...ya,%201989.pdf
trir вне форума  
 
Автор темы   Непрочитано 03.02.2020, 09:38
#16
lesnaya


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
а это точно прямоугольник - т.е. фигура с попарно равными и параллельными сторонами и углами по 90гр?
В принципе может быть и не только прямоугольник, но в данном случае код писался именно для прямоугольника и на нем испытывался. Кстати к моему удивлению программа распознает и Rectangle помимо полилиний
lesnaya вне форума  
 
Непрочитано 03.02.2020, 09:54
#17
Кулик Алексей aka kpblc
Moderator

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос №2 как из замкнутых соприкасающихся контуров получить 1 без!?!? Botan AutoCAD 2 18.09.2011 21:21
Как по примитиву получить указатель на динамический блок, в котором этот примитив находится? молодой человек Программирование 3 08.02.2011 21:47
Быстро получить Набор объектов попадающих в Сферу [N.S] Программирование 10 09.08.2009 11:04
Получить список блоков в чертеже DonVik Программирование 6 27.08.2008 15:08
координаты вершин выбранной полилинии на VB? как получить ssv22 Программирование 5 17.07.2008 00:01