Создание Классов Расширения Протокола
Чтобы создавать заказной режим объектной привязки, Вы должны создать классы расширения протокола, чтобы обработать входную точку "в юридическое лицо" обработка. Класс AcDbCustomOsnapInfo определяет протокол, который каждый заказной режим объектной привязки должен осуществить для уместных примитивов. Этот базовый класс содержит функцию getOsnapInfo (), который исполняет входную обработку точки на примитиве:
class AcDbCustomOsnapInfo : public AcRxObject {
public:
ACRX_DECLARE_MEMBERS(AcDbCustomOsnapInfo);
virtual Acad::ErrorStatus
getOsnapInfo(
AcDbEntity* pickedObject,
int gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcArray<AcGePoint3d>& snapPoints,
AcArray<int>& geomIdsForPts,
AcArray<AcGeLine3d>& snapLines,
AcArray<int>& geomIdsForLines);
};
Создавать расширение протокола классифицирует для заказных режимов объектной привязки
1 Определяют абстрактный класс расширения протокола, полученный из AcDbCustomOsnapInfo.
Например, если ваш класс пользователя назван AcmeSocketInfo, определите это следующим образом:
class AcmeSocketInfo : public AcDbCustomOsnapInfo{
public:
ACRX_DECLARE_MEMBERS(AcDbSocketInfo);
virtual Acad::ErrorStatus
getOsnapInfo(
AcDbEntity* pickedObject,
int gsSelectionMark,
const AcGePoint3d& pickPoint,
const AcGePoint3d& lastPoint,
const AcGeMatrix3d& viewXform,
AcArray<AcGePoint3d>& snapPoints,
AcArray<int>& geomIdsForPts,
AcArray<AcGeLine3d>& snapLines,
AcArray<int>& geomIdsForLines);
};
ACRX_NO_CONS_DEFINE_MEMBERS(AcmeSocketInfo, AcDbCustomOsnapInfo);
2 Инициализируют основной класс расширения протокола и добавляют это к иерархии классов во время выполнения.
Например, добавьте следующие линии к вашему acrxEntryPoint () функция:
AcmeSocketInfo::rxInit();
acrxBuildClassHierarchy();
3 Для каждого уместного класса примитива, получите класс расширения протокола из базового класса.
Например, Вы могли бы получать класс по имени AcmeSocketForLines, который осуществляет getOsnapInfo () чтобы обработать входную обработку точки для линий.
ОБРАТИТЕ ВНИМАНИЕ, что заданное по умолчанию выполнение должно быть связано с AcDbEntity для каждого зарегистрированного класса, полученного из AcDbCustomOsnapInfo.
4 Создают образец каждого объекта расширения протокола и добавляют объекты к соответствующим AcRxClass дескрипторным объектам, использующим addX () функция.
Например:
pSocketForLine = new AcmeSocketForLine;
AcDbLine::desc()->addX(AcmeSocketInfo::desc(), pSocketForLine);