|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
01.02.2020, 18:05 | #1 | |
Получить ObjectIDs из Selection Set
Регистрация: 10.11.2013
Сообщений: 52
|
||
Просмотров: 7007
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,041
|
Вы хоть на .Net API пишете?
Цитата:
метод SelectLast того же класса можете попробовать. |
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
Если правильно понимаю, то нет, пишу в class library..
В автокаде работаю уже очень давно и захотелось расширить функционал, программирование тоже интересно, по видео урокам ознакомился в c# и далее по автокадовскому справочнику пытаюсь разобраться... Вот в этом то и вопрос. Я получил Selection Set и надеюсь что успешно достал из него ObjectId (проблема была в том, что getObjectIds выдает ObjectIds[], а мне нужен именно мой Entity, который был выделен, как я понимаю для перебора данных можно использовать foreach, либо если есть уверенность что был выбран один Entity, тогда можно обратиться через ObjectIds[0].) Но не могу разобраться как мне после получения ObjectId вытащить свойства этого Entity.. Сначала нужно открыть ForRead, а что потом ? |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,041
|
Код:
----- добавлено через ~11 мин. ----- Цитата:
Привести общий object тип, возвращаемый GetObject по ObjectId, к типу вашего примитива. |
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
Благодарю за помощь, но там смысл немного в другом был. Изначально предлагается на выбор либо выбрать примитив, либо нарисовать. Если пользователь выбирает, то все окей и остается только понять как уже зная его ID получить информацию о расположении на экране (нужны точки, если это полилиния - нужны координаты всех вершин как минимум).
Если выбираем нарисовать, то рисуется прямоугольник (полилиния). Затем завтра попробую методом SelectLast его выделить и получить ObjectId и далее опять все сводится к тому как получить интересующую меня информацию о примитиве. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,041
|
Цитата:
|
|||
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,588
|
Я так понимаю, у Вас проблема с непониманием, что такое ObjectId и что с ним потом делать...
Если совсем грубо и образно, то ObjectId это номер/адрес объекта в dwg файле. Сам адрес то не говорит Вам о том, в какие обои оклеены комнаты, для того, что бы это узнать нужно придти по этому адресу и посмотреть. Тут подробнее: https://sites.google.com/site/bushma...ektov-objectid Или так, коротенько: Код:
Код:
|
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
Всем большое спасибо за помощь, все получилось!
Но не стал пользоваться GetEntity, так как так обязательно нужно задавать параметр - сообщение, а когда примитив был выбран до начала команды тогда это не нужно. В итоге: Код:
Код:
Очень приятно когда новичка не отправляют искать ответы в интернете (что я конечно и сам пытался сделать), а дают реальные советы. Спасибо P.S. еще очень интересует использование Transaction manager, вопрос возник после ответа Boxa. В первом случае с using начинается новая транзакция, а во втором случае сразу открывается полилиния. Как я понимаю, использование Transaction manager требуется в случае когда в одной транзакции нужно обратиться к нескольким объектам. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,041
|
Цитата:
Код:
Цитата:
Цитата:
|
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
У меня так и получилось, что разные варианты предлагает на выбор (либо примитив выбран до начала команды, если нет, предлагается выбрать его или нарисовать), но во всех случаях получилось через Selection Set получить ObjectId и далее все ок.
Код:
Насчет List тоже думал, но не хватило, видимо, знания С#... Проблема в том что прямоугольник может быть нарисован путем задания 5 вершин где последняя совпадает с первой (5 вершин) и путем задания 4 вершин и затем "close" (4 вершины). Поэтому при запросе 5 вершины у меня автокад начал ругаться. И как раз появилась идея сделать через List чтобы можно было узнать pLine.NumberOfVertices и исходя из этого добавить в List нужное количество вершин. Хотел это как-то в цикл for запихнуть, но не знаю как обратиться к элементу, нужно было что-то вроде vert[i] вместо vert0, vert1 и тд... В итоге просто отказался от пятой точки потому что она либо есть, либо нет, но в любом случае совпадает с первой. Это первая программа, так что за красотой пока не гонюсь, главное чтобы работала. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
lesnaya, а что потом с этими точками предполагается делать? Мне просто интересно.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,041
|
Цитата:
Код:
и получаете по индексу любую точку vert[Index = диапазон 0...Count-1] |
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
Цитата:
Цитата:
----- добавлено через ~2 ч. ----- Еще раз вынужден обратиться за помощью. Так как полилиния может быть нарисована разными способами, мне нужно упорядочить вершины прямоугольника. Входные данные метода - координаты вершин, далее они собираются в List и я пытаюсь его упорядочить с помощью метода Sort с IComparer. На выходе хочу получить List где будут координаты углов по часовой стрелке, начиная с левого нижнего. Но пока срабатывает через раз. Код:
Последний раз редактировалось lesnaya, 02.02.2020 в 18:28. |
|||
|
||||
Регистрация: 18.12.2010
Сообщений: 5,057
|
|
|||
|
||||
Регистрация: 10.11.2013
Сообщений: 52
|
В принципе может быть и не только прямоугольник, но в данном случае код писался именно для прямоугольника и на нем испытывался. Кстати к моему удивлению программа распознает и Rectangle помимо полилиний
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,844
|
Учитывая, что примитива RECTANGLE в принципе не существует в ACAD, ничего удивительного
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос №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 |