Тема: Порядок просмотра диапазона в цикле "for each..."
Просмотр диапазона по умолчанию ведется в порядке слева-направо и сверху-вниз.Возможно ли изменение на сверху-вниз и слева-направо
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → VBA → Порядок просмотра диапазона в цикле "for each..."
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Просмотр диапазона по умолчанию ведется в порядке слева-направо и сверху-вниз.Возможно ли изменение на сверху-вниз и слева-направо
> Юрий
Чуть подробнее, пожалуйста:
О каком таком "порядке по умолчанию" речь?
И о диапазоне чего?
конструкция for each перебирает элементы в порядке занесения их в коллекцию
если надо перебирать в каком-то своем порядке - то тогда следует явно указывать индекс
> Дмитрий
А в AcadSelectionSet?
а чем принципиально отличается AcadSelectionSet от коллекции?
все аналогично.
доступ по индесу в явном виде будет так:
set eobj=selset.item(II)
Вообще-то, можно определить экспериментальным путем (во всяком случае попробовать), в каком порядке элементы включаются (заносятся) в AcadSelectionSet, и в каком порядке перебирает их цикл For Each. И еще. Связан ли этот порядок с расположением примитивов ACAD, если речь идет о них, на экране. Т. е. с таким их свойством как координаты. Вот все эти вещи мне хотелось выудить из автора темы Юрия. Да, и как быть с неграфическими объектами?
есть предположение, что в AcadSelectionSet объекты попадают в порядке их следования в acDatabase. а туда они, в свою очередь, попадают в порядке их создания.
но это пока предположения, основанные на логических умозаключениях. Т.е. я ежели б писал эту часть сделал бы так.
При случае проверю
Почему молчит Юрий?!
Людям же интересно же..!
есть предположение, что в AcadSelectionSet объекты попадают в порядке их следования в acDatabase
Мой опыт подтверждает это предположение: если я выделяю группу объектов рамкой, то у Автокада нет иной информации об очередности выделенных объектов, кроме их порядковых номеров в базе данных документа. Видимый на экране порядок может сколько угодно отличаться от порядка следования объектов в базе данных чертежа.
А если выделять "поштучно", Автокад, по идее, "подцепит" мой порядок следования.
Господа!
Нет ли у вас ощущения, что наши умозаключения напоминают анекдот о том, что таракан слышит ногами...
Вот кое-какие выводы из прямого эксперимента:
1. Цикл For Each перебирает элементы в наборе строго в порядке их расположения в этом наборе, т.е. как и цикл
For i_min to i_max. Можно развить идею Дмитрия о принципиальном сходстве Collectin и SelectionSet и, установив счетчик на цикле, использовать его значения как key для доступа к элементу набора...вообщем, бред.
2. Порядок этот не подчиняется ни очередности создания объектов, ни расположению их на чертеже, ни даже поштучному включению в набор.
Что касается расположения записей об объектах в базе данных чертежа, то тут нужен специалист по ObjectARX. Мой просмотровщик БД (dbviewer),вы будете смеяться, показывает цифры - объекты Text in ModelSpace - в порядке номеров, а буквы по алфавиту.
Видимо, он сам их и сортирует. Есть у меня крепкое подозрение, что искать тут какую-то закономерность и не стоит, это вполне случайный процесс. Как, например AutoCAD генерирует метки (handle) объектов? Или надо их рассматривать как шестнадцатиричные числа?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → VBA → Порядок просмотра диапазона в цикле "for each..."
Форум работает на PunBB, при поддержке Informer Technologies, Inc