Тема: Почему при добавлении линий к массиву определяется только первая?

Столкнулся с совершенно непонятным явлением. При добавлении линий (AcGeLine3d) к массику snapCurves, при возникновении события срабатывает только линия, добавленная самой первой. Остальные остаются "незамеченными". В чем может быть причина?

Re: Почему при добавлении линий к массиву определяется только первая?

Я думаю, что твоя проблема в том, что все линии проходят через одну точку. И в этом случае AutoCAD обрабатывает первую.
Вот простенький пример, когда ближе к концам отрезка выбирается продолжение отрезка, а в середине - нормаль к отрезку. Срабатывают все три линии:

Acad::ErrorStatus
MkrInfo::getOsnapInfo(
    AcDbEntity*           pickedObject,
    int                   gsSelectionMark,
    const AcGePoint3d&    pickPoint,
    const AcGePoint3d&    lastPoint,
    const AcGeMatrix3d&   viewXform,
    AcArray<AcGePoint3d>& snapPoints,
    AcArray<int>&         geomIdsForPts,
    AcArray<AcGeCurve3d*>&  snapCurves,
    AcArray<int>&         geomIdsForLines)
{
  AcDbLine *p = AcDbLine::cast(pickedObject);
  if (p)
  {
    AcGePoint3d startP = p->startPoint(),
                endP   = p->endPoint(),
                midPt  = startP + 0.5 * (endP - startP);
    AcGeLineSeg3d *pls1 = new AcGeLineSeg3d;
    pls1->set(startP, (endP - startP));
    snapCurves.append(pls1);
    AcGeLineSeg3d *pls2 = new AcGeLineSeg3d;
    pls2->set(endP, (endP - startP));
    snapCurves.append(pls2);
    AcGeLineSeg3d *pls3 = new AcGeLineSeg3d;
    pls3->set(midPt, (endP - startP).perpVector());
    snapCurves.append(pls3);
  }
  return Acad::eOk;
}

Re: Почему при добавлении линий к массиву определяется только первая?

Да, через одну. Кад интерпретирует как неприемлимые пересекающиеся прямые, или имеющие одну общую точку с одинаковыми координатами по всем 3-м осям?
И вопросец, на засыпку :) Каким образом сделать так, чтобы при перемещении указателя и задержки возле другой точки привязки, добавлялась новая линия, и при достижении 5-ти точек привязки, как в стеке, 1-я удалялась. Так как это реализовано в CAD'е?

Re: Почему при добавлении линий к массиву определяется только первая?

Нет, какие бы точки я не брал, даже диаметрально противоположные, всеравно CAD берет только первую линию из массива. Тут что-то другое, наверное.

Re: Почему при добавлении линий к массиву определяется только первая?

Да, через одну. Кад интерпретирует как неприемлимые пересекающиеся прямые, или имеющие одну общую точку с одинаковыми координатами по всем 3-м осям?

Просто AutoCAD может одновременно использовать только одну линию проходящую через заданную точку.

И вопросец, на засыпку :) Каким образом сделать так, чтобы при перемещении указателя и задержки возле другой точки привязки, добавлялась новая линия, и при достижении 5-ти точек привязки, как в стеке, 1-я удалялась. Так как это реализовано в CAD'е?

Как обычно ничего не понял. :( Думаю, что тебе не нужно добавлять сразу несколько кривых в snapCurves. Анализируй pickPoint и добавляй только одну, которая лучше всего подходит.

Re: Почему при добавлении линий к массиву определяется только первая?

Sandrick пишет:

Нет, какие бы точки я не брал, даже диаметрально противоположные, всеравно CAD берет только первую линию из массива. Тут что-то другое, наверное.

В моем примере все работает!

Re: Почему при добавлении линий к массиву определяется только первая?

Ок, а как же тогда действует, к примеру RectAngle примитив, при движении курсором "вокруг" одного из его углов, "предварительно привязавшись" к точке этого угла, появляются прямые либо по X-осям, либо по Y-осям????????????????
Неужели единственный выход из этой ситуации, это взять, грубо говоря, ВЕСЬ МАССИВ (огогогогогогогого.........) и вшмалять на каждую точку по 2(!) класса OsnapInfo????????? Этот же подход крайне не практичен! А вызов функции getOsnapInfo происходит только тогда, когда курсор находится на расстоянии заданном в переменной APERTURE от точки...

Re: Почему при добавлении линий к массиву определяется только первая?

Все. Найдена причина. Все дело в том, что для добавления в массив SnapCurves я использовал AcGeLine3d, а когда взял AcGeLineSeg3d, все стало на свои места!!! Спасибо большое!
И работает на все, добавленные в массив snapCurves направления...