Тема: Как узнать сколько объектов на слое?

Теперь мы получили список слоев, а как узнать какие объекты есть на слое?
И ещё, можно ли создавать менюшку(кнопочки и пр.) в AutoCAD? Чтоб пользователь щелкнул, увидел сколько слоев, щелкнул на слое в списке, увидел список объектов на слое.
Если кто знает или делал, могет документация какая есть...
Всем заранее спасибо!

Re: Как узнать сколько объектов на слое?

1) Готового примера у меня нет, но идею подскажу - проходишься итератором по всем блокам чертежа (там будет и MODEL_SPACE и PAPER_SPACE и т.д.) и для каждого примитива из блока получаешь его слой. Если не интересуют слои внутри обычных блоков, то можешь ограничится MODEL_SPACE и PAPER_SPACE. Ну а дальше ясно.
Алгоритм не слишком быстрый - сканируется вся база чертежа...
Кстати, а что такое "увидел список объектов на слое"? Ты как их собираешься отображать? Совет - формулируй задачу почетче - получишь более точный ответ. smile
2) Кнопочку или менюшку добавляешь средствами редактирования меню (или *.mnu/*.mns до версии 2006 или через CUI в версии 2006) Это самый простой и разумный способ. Второй вариант - создавать свою панель используя ObjectARX и MFC, и в ней организовывать списки, кнопочки и т.д. Этот способ тебе как новичку не советую. Много подводных камней. Потеряешь кучу времени и сил, а получишь ли нормальный результат - неизвестно...

Re: Как узнать сколько объектов на слое?

Суть задачи такова: есть разношерстные документы .dwg , необходимо разложить эти dwg правильно в БД. В моём видении (я новичок и в autocad и в ObjectARX) эту задачу нужно решать так:
1. разложить документ по слоям и каждому слою дать тип (водные объекты, лес, дороги и пр.)
2. разложить элементы слоя (возможно, что на слое окажутся инородные элементы, например на слое дорог - речка)
3. занести это в БД
Если у кого-то есть наработки и ссылки на полезную информацию, с удовольствием приму к сведению!

Re: Как узнать сколько объектов на слое?

Возник вот такой вопрос:
Как перейти от AcDbBlockTableRecord к AcDbEntity?
Поискал в хелпе, вроде пока ничего не обнаружил.

Re: Как узнать сколько объектов на слое?

Всё вопрос снял

Re: Как узнать сколько объектов на слое?

Если быть более точным, то как определить у какого блока reference есть, а у какого нет?

Re: Как узнать сколько объектов на слое?

Просто у меня в таблице блоков лежат:
Áëîê *Model_Space:
Áëîê *Paper_Space:
Áëîê *Paper_Space0:
Áëîê ADCADD_ZZ:
Áëîê GUGK91_2:
Áëîê marsh3_1:
Áëîê GUGK369_1:
Áëîê ÊÈÊ:
Áëîê GUGK401_1:
Áëîê GUGK368_1:
Áëîê I03901:
Áëîê GUGK119:
Áëîê GUGK384_1:
Áëîê GUGK468:
Áëîê GUGK368_500:
Áëîê GUGK399:
Áëîê GUGK238_1:
Áëîê M5_123:
Áëîê GUGK213:
Áëîê gugk403:
Áëîê GUGK1:
Áëîê GUGK388_2_500:
Áëîê M5_0:
Áëîê ÑÅÂÅÐ:
Áëîê 0.3:
Áëîê well:
Áëîê GUGK11_7:
Áëîê BL_3:
Áëîê _Oblique:
Áëîê ð1:
Áëîê ð2:
Áëîê ð3:
Áëîê ð4:
Áëîê h:
Áëîê A$C108136B8:
Áëîê _ArchTick:
Тут какая-то лабуда с русским.
Что это ещё за блоки ктоме первых трех? И могут ли они нести какую-нить смысловую нагрузку?

Re: Как узнать сколько объектов на слое?

> Pharaon
Есть очень полезный метод у класса AcDbBlockTableRecord::getBlockReferenceIds
Если возвращаемый ее массив пуст - блок в чертеже не вставлялся (т.е. нет ни одного AcDbBlockReference ссылающегося на него).
Ничего больше из написанного выше не понял. Посмотри в команде _BLOCK (или _RENAME) список определенных в чертеже блоков и сравни с тем, что у тебя получилось. Похоже, что что у тебя ошибки в указателях или еще какая-нибудь ерунда.

Что это ещё за блоки ктоме первых трех? И могут ли они нести какую-нить смысловую нагрузку?

Ты это у нас спрашиваешь? biggrin Молодец!
Советую сначала все-таки изучить AutoCAD, а потом уже программировать для него - иначе вопросов будет значительно больше чем ответов.

Re: Как узнать сколько объектов на слое?

Большое спасибо.
Я сам запутался.
Проблема была в том, что AuotCAD стоял криво и при обращении к BlockReference нормальных объектов вылетал.
Я уже перепробовал всё что можно, ничего не получалось. Из-за этого и решил, что это какие-то неправильные объекты.